前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【全文搜索】全文搜索 PostgreSQL 或 ElasticSearch

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

作者头像
首席架构师智库
发布2022-04-27 12:40:46
2.2K0
发布2022-04-27 12:40:46
举报
文章被收录于专栏:超级架构师超级架构师

在本文中,我记录了在 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 万条记录的结果。

比较图

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://jiagoushi.pro/full-text-search-postgresql-or-elasticsearch

讨论:知识星球【首席架构师圈】或者加微信小号【cea_csa_cto】或者加QQ群【792862318】

公众号

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

微信小号

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

QQ群

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

视频号

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

知识星球

向大咖提问,近距离接触,或者获得私密资料分享。

喜马拉雅

路上或者车上了解最新黑科技资讯,架构心得。

【智能时刻,架构君和你聊黑科技】

知识星球

认识更多朋友,职场和技术闲聊。

知识星球【职场和技术】

微博

【智能时刻】

智能时刻

哔哩哔哩

【超级架构师】

抖音

【cea_cio】超级架构师

快手

【cea_cio_cto】超级架构师

小红书

【cea_csa_cto】超级架构师

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 首席架构师智库 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL 全文搜索
  • ElasticSearch
  • 比较图
  • 结论
  • 术语
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档