【全文搜索选型】全文搜索 PostgreSQL 或 ElasticSearch

在本文中,我记录了在 PostgreSQL(使用 Django ORM)和 ElasticSearch 中实现全文搜索 (FTS) 时的一些发现。

作为一名 Django 开发人员,我开始寻找可用的选项来在大约一百万行的标准大小上执行全文搜索。有两个值得尝试的选项:PostgreSQL 和 ElasticSearch。

在深入研究我的发现之前,让我们澄清一下全文搜索 (FTS)(或“搜索”)与数据库过滤器或查询之间的区别。“搜索”涉及从零开始,然后向其中添加结果。数据库过滤从一个集合开始,然后根据条件从中删除条目。过滤不适用于模糊输入,但可以使用模糊输入完成“搜索”。

PostgreSQL 全文搜索


我的大部分项目都使用 Django Web 框架和 PostgreSQL。PostgreSQL 从 2008 年开始支持全文搜索 (FTS),Django 从 1.10 (2016) 开始通过 django.contrib.postgres 支持 FTS。因此,它是我集成的最快和最简单的选择。以下是我的一些发现:

这是一种更便宜、更快捷的选择,因为它不需要任何额外的设置和维护。

在我的本地(Razer Blade 2.4 GHz 6 Core i7)测试中,使用 GIN Index 的多达 500,000 条记录始终在大约 30 毫秒左右得到结果。在网上查看其他人所做的基准测试时,我发现它会在大约 30-50 毫秒内返回 150 万条记录的结果。

使用 Trigram 最多可以将其减慢 5 倍。

当前的 Django 集成不直接支持 Stemming 或 Fuzziness

ElasticSearch

ElasticSearch 是一个非常成熟的名称,有很多库可用于与 Django 和其他框架集成。以下是调查结果:

该技术仅针对搜索进行了优化,但设置和维护基础架构可能非常耗时。

自己设置需要专用的服务器或服务,这比 PostgreSQL 选项昂贵。

随着数据的增长进行扩展更易于管理,它支持所有搜索选项,例如 Trigram、EdgeGram、Stemming、Fuzziness

在我的本地(Razer Blade 2.4 GHz 6 Core i7)测试多达 500,000 条记录时,它始终在大约 25 毫秒内返回结果。在网上查看其他人所做的基准测试时,我发现它会在大约 5-30 毫秒内返回 150 万条记录的结果。

比较图

7082fc57e136d205585f575a3e9871e3.png

Postgresql vs ElasticSearch performance graph

结论


随着 PostgreSQL 的每个新版本,搜索响应时间都在改进,并且与 ElasticSearch 相比,它正在朝着苹果与苹果的比较前进。因此,如果项目不打算拥有数千万条记录或大规模数据,Postgresql 全文搜索将是最佳选择。

术语

  • 词干提取:这是将单词简化为其根形式的过程,以确保该单词的变体在搜索过程中与结果匹配。例如,Referencing、Reference、References 可以归结为一个词 Refer 并且在搜索词时,refer 将返回具有该词的任何变体的结果。

  • NGram:它就像一个在单词上移动的滑动窗口——一个连续的字符序列,直到指定长度。例如,术语 Refer 将变成 [R, RE, REF, E, EF, EFE, F, FE, FER]。NGram 可用于部分搜索单词,甚至从中间搜索单词。最常用的 NGram 类型是 Trigram 和 EdgeGram。

  • 模糊性:模糊匹配允许您获得不完全匹配的结果。例如,搜索单词框也会返回包含 fox 的结果。常见应用包括拼写检查和垃圾邮件过滤。

本文 :https://architect.pub/full-text-search-postgresql-or-elasticsearch
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
63efea6910e6fd632fb6fecceb7c8a7f.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

47e3001c377bb8bb27c08fdcdf69c891.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

a6354e47aa4b35edc3500be0957f4c44.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

8d0aefc8fc53c03671c10bb04364f283.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

7c2495cc76bc3a4329a4b42e236c7e0f.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

ed2a330f382cd0dd554e1f2f655398ef.jpeg

抖音【cea_cio】超级架构师

e20100ba90f98ccb14e42f027f54378b.jpeg

快手【cea_cio_cto】超级架构师

3521a178653ca12945eb0a3d572b23cd.jpeg

小红书【cea_csa_cto】超级架构师

217c8568919db33a9052004644f1bdcf.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。


http://www.niftyadmin.cn/n/1450696.html

相关文章

花生壳与网络地址转换

网络地址转换(NAT)有称为NAPT即网络地址端口转换NAT是什么:网络内部的设备分配的都是私有IP地址,但支持NAT的路由器保留一个或多个 在网络外部有效的internet IP地址。当客户端将分组发送到网络外部时NAT将客 户端的内部IP地址转换为外部地址 NAT的主要用…

时尚外观 索尼新品显示器e96d上市(转)

对于索尼产品的品质,消费者一向反应良好。索尼以它在产品设计上的独到之处,往往一款新品还没有上市就吸引了众多人的目光。作为一家多元化的国际大厂,索尼公司几乎在所有的产品领域都占据在相当重要的地位。今天我们就来看一款众目期待的索尼19英寸显示器…

vue 事件总线EventBus的概念、使用以及注意点

vue 事件总线前言正文EventBus的简介EventBus的使用一、初始化二、向EventBus发送事件三、接收事件四、移除监听事件结束语前言 vue组件中的数据传递最最常见的就是父子组件之间的传递。父传子通过props向下传递数据给子组件;子传父通过$emit发送事件,并…

ASP发送E-MAIL(转)

如果你希望用ASP发送E-MAIL,你需要安装一个A S P部件。有几种第三方厂商的部件你可以使用。但是在IIS4下,你可以使用CDONTS。 虽然名字奇怪,它是很容易使用的并且性能良好。如果你希望使用它,请跟随下面步骤。 1.检查你是否安装了…

移动端推荐使用

移动端js框架推荐:模式MVC Bankbone 它拥有丰富的插件库Backbone.Mutators(扩展原型对象)、Backbone.Validation(内置验证器)、Backbone.Chosen(使集合包含不同的模型)、Backbone.Relational(一对多,多对多对象关系的用法)..等等转载于:https://www.cnbl…

css两种常用的不定宽高的水平垂直居中方法,记住它,不再为样式发愁

css 几种常用的简单容易记住的水平垂直居中方法前言正文第一种方法第二种方法结束语前言 我们在设计网页时,会大量的运用到水平垂直居中,如果知道元素的宽高,那水平垂直居中是很简单的,无非是用一下margin就可以完成,…

POJ 1279 Art Gallery(半平面交求多边形核的面积)

题目链接 题意 &#xff1a; 求一个多边形的核的面积。 思路 &#xff1a; 半平面交求多边形的核&#xff0c;然后在求面积即可。 #include <stdio.h> #include <string.h> #include <iostream> #include <math.h>using namespace std ;struct node {d…

uva 11885 - Number of Battlefields(矩阵快速幂)

题目连接&#xff1a;uva 11885 - Number of Battlefields 题目大意&#xff1a;给出周长p&#xff0c;问多少种形状的周长为p的&#xff0c;并且该图形的最小包围矩阵的周长也是p&#xff0c;不包括矩形。 解题思路&#xff1a;矩阵快速幂&#xff0c;如果包含矩形的话&#x…