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

news2024/12/23 14:54:22

在本文中,我记录了在 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.coloradmin.cn/o/715763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度文心一言App已在AppStore上架—特别是发现页的功能太强大了

百度文心一言 App 现已上架苹果 App Store,所有用户可免费下载安装。 特别是发现页的功能,真的太强大了,基本涵盖了你所有已知的 AI 工具功能!比如: 小红书探店文案、风格头像、朋友圈神器、短视频脚本生成、AI 绘画…

【ESP32 开发】| Clion 搭建 ESP32 开发环境

目录 前言1 软件以及所需工具2 安装 ESP-IDF 4.4.42.1 开始安装2.2 选择组件,建议全选 3 用 ESP-IDF 4.4 CMD 添加环境变量并新建工程3.1 打开 ESP-IDF 4.4 CMD 初始化环境变量3.2 切到工作路径并新建工程 4 配置 Clion 开发环境4.1 用 Clion 打开新建的工程文件4.2…

有了企业网盘,为什么要需要知识文档管理系统

关键词:企业网盘、知识文档管理系统、群晖NAS 编者按:随着企业办公室自动化的要求越来越明显,企业对于文档存储的需求也逐渐加大。企业网盘的出现解决了公司文件数据储存等难题。但随着企业的文档数据逐渐增多,如何安全管理企业重…

蓝牙资讯|苹果AirPods Pro充电盒将换用USB-C接口,还有新功能在测试

据彭博社记者 Mark Gurman 在他的最新一期 Power On 时事通讯中报道,苹果正准备推出适用于 AirPods Pro 的 USB-C 充电盒,大概会在今年秋天与 iPhone 15 系列一起推出,后者也将从 Lightning 端口切换到 USB-C 端口。 此外,苹果也…

Java集合之Disruptor 介绍

文章目录 1 Disruptor1.1 简介1.1.1 定义1.1.2 Java中线程安全队列1.1.3 Disruptor 核心概念 1.2 操作1.2.1 坐标依赖1.2.2 创建事件1.2.3 创建事件工厂1.2.4 创建处理事件Handler--消费者1.2.5 初始化 Disruptor1.2.5.1 静态类1.2.5.2 配置类1.2.5.3 Disruptor 构造函数讲解 1…

uniapp仿浙北汇生活微信小程序

最近给公司写了一个内部微信小程序,功能比较简单,之前是用微信小程序原生写的,一遍看文档一边写,js,wxml,wxcc,json分在不同文件的写法很不习惯,于是花了两天用uniapp重写了一遍&…

TextMining day1 电力设备运维过程中的短文本挖掘框架

电力设备运维过程中的短文本挖掘框架 III. 短文本挖掘框架的具体设计A. 预处理模块的具体设计B. 数据清洗模块的具体设计C. 表示模块的具体设计D. 数据分析模块的具体设计 IV. 案例研究A. 基于文本分类的缺陷程度判断B. 基于文本检索的缺陷处理决策 V. 结论 预处理 首先&#x…

一个光模块可以带动多少户

随着科技的快速发展,光模块的应用场景逐渐扩大,数据中心、人工智能AI的创新使我们的生活日新月异。今天我们就来看看一个小小的光模块究竟蕴藏着多大的能量! 一、影响光模块带动户数的因素 光模块是一种实现光电转换和电光转换功能的光电子…

android Surface(1, 2)

android Surface(1, 2) android的Surface相关内容从底层依次往上分别是: 1.frameBuffer,简称fb,对于同一个android系统,可以同时存在多个frameBuffer,本机是fb0,依次外接时,fb1, fb2, ……fbn…

LeetCode·每日一题·445. 两数相加 II·模拟

作者:小迅 链接:https://leetcode.cn/problems/add-two-numbers-ii/solutions/2328613/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-67qx/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权&#xff…

2023.6.26-7.2 AI行业周刊(第152期):从一个热门视频,得到的人生发展感悟

上周五去上海参加2023年MWC(世界移动通讯大会),在回无锡的路上,无意中刷到一个已关注博主的视频。 这个博主是2021年的时候,刚发第二个视频的时候,就一直在关注的。 从分享他从公务员辞职的经历&#xff…

【Web3】认识Web3

Web3是一种用于描述下一代互联网的概念 它指在构建一个去中心化 用户控制和加密安全的网络环境。 Web3的目标是将权利和数据掌握回归到用户手中 通过采用分布式技术和加密货币的支持 实现更加开放 公开和透明的互联网 Web的主要特点 去中化:Web3的核销理念是去中心…

静态时序分析: update io latency

往期文章链接: 静态时序分析: 虚拟时钟与I/O延迟约束 静态时序分析: 时钟延时(clock latency) 在CTS之前,clock是ideal的,in2reg与reg2out的path由于reg的clock network delay为0,所以时序比较容易收敛,在CTS之后,由于reg的clock network delay有了真实值(propagated…

Spring Boot 中的滚动部署是什么,如何使用

Spring Boot 中的滚动部署是什么,如何使用 简介 在开发和部署应用程序时,我们希望最小化中断,以确保应用程序始终可用。滚动部署是一种部署应用程序的方法,可以逐步将新版本部署到生产环境中,同时保持应用程序的可用…

Linux 6.5增加对高通开源GPU Adreno 690的支持

导读即将推出的Linux 6.5内核将把对高通Adreno 690 GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代(SC8280XP)平台,而联想ThinkPad X13s笔记本电脑和其他硬件也采用了该平台。 新的支持将包含近200行代码&…

基于小程序+云开发制作一个文件传输助手小程序

微信文件传输助手是真人?基于云开发制作一个文件传输助手小程序,你发给ta的小秘密,只有你自己知道。 开发步骤一、创建小程序二、云开发配置环境配置绑定云环境三、页面设计首页详情页底部弹窗四、云数据库概念云函数服务端函数文件上传

Java版事件与委托实现自动创建工厂并热加载

本文已收录于专栏 《Java》 目录 概念说明事件与委托工厂方法热加载 需求介绍代码实现1.整体结构2.工厂方法中已经存在的类工厂接口运算类工厂(其他工厂基本上是一样的):目前没有加法类的工厂我们后面会添加加法类工厂然后热加载运行运算父类运算子类 3.工厂方法之外…

Java 运行jar包变更配置文件与变量

文章目录 前言实现原理不同环境的配置文件变更配置变量 前言 为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方…

PDF怎么转换成Excel?两个实用的方法给你!

如何将PDF文件转换成Excel表格的格式呢?在日常办公中,我们经常会遇到需要将PDF文件转换成Excel表格的情况。由于PDF文件具有稳定的格式特征,很多时候我们下载或接收到的文件都是以PDF格式呈现。那么,当我们需要使用Excel表格格式时…

数据结构--字符串的KMP算法

数据结构–字符串的KMP算法 朴素模式匹配算法: 一旦发现当前这个子串中某个字符不匹配,就只能转而匹配下一个子串(从头开始) 但我们可以知道: 不匹配的字符之前,一定是和模式串一致的 \color{red}不匹配的字符之前,一…