PostgreSQL(全文检索)与ElasticSearch

nafvub8i  于 2022-12-29  发布在  ElasticSearch
关注(0)|答案(3)|浏览(214)

嗨,我在我的服务中实现搜索功能之前做了一些研究。我目前使用PostgreSQL作为我的主存储。我当然可以使用PostgreSQL的内置全文搜索,但问题是我的数据分散在几个表中。
我的服务是一个电子商务网站,所以如果一个客户搜索“好苹果笔记本电脑”,我需要连接Brand表,post表和review表(1个帖子是几个评论+简短摘要的组合)来完全搜索所有帖子。如果我使用elasticsearch,我可以通过预处理插入完整的帖子。
根据我的研究,有些人说PostgreSQL的FTS和ElasticSearch有相似的性能,有些人说ElasticSearch更快。
先谢了

mrfwxfqh

mrfwxfqh1#

如果PostgreSQL已经在您的堆栈中,最好的选择是使用PostgreSQL全文搜索。

为什么要在PostgreSQL中使用全文搜索(FTS)?

因为否则您必须将数据库内容提供给外部搜索引擎。
外部搜索引擎(如elasticsearch)速度很快

  • 他们无法索引所有文档-可能是完全虚拟的
  • 他们无法访问属性-没有复杂的查询
  • 必须维护它们-这是DBA的难题
  • 有时他们需要认证
  • 它们不提供即时搜索(需要时间下载新数据和重新建立索引)
  • 它们不提供一致性-搜索结果可能已经从数据库中删除

如果你想了解更多关于PostgreSQL中的FTS的信息,有一个很棒的演讲,作者是Oleg Bartunov(我从这里摘录了上面的列表):"Do you need a Full-Text Search in PostgreSQL ?"
这是一个简短的例子,你可以创建一个“文档”(阅读文本搜索文档)从多个表在SQL:

SELECT to_tsvector(posts.summary || ' ' || brands.name) 
FROM posts
INNER JOIN brands ON (brand_id = brands.id);

如果你正在使用Django作为你的电子商务网站,你也可以阅读我写的这篇文章"Full-Text Search in Django with PostgreSQL"

6za6bjd0

6za6bjd02#

我找到了2021年的一些基准研究
Postgresql vs ElasticSearch performance graph

    • 结论**
  • 随着PostgreSQL的每一个新版本,搜索响应时间都在改善,与ElasticSearch相比,它正在向苹果公司的苹果公司前进。因此,如果项目不打算拥有数百万条记录或大规模数据,Postgresql全文搜索将是最好的选择。*
cwdobuhd

cwdobuhd3#

**简短回答:**Elasticsearch更好
**说明:**PostgreSQL和Elasticsearch是两种不同类型的数据库。Elasticsearch在文档搜索方面功能强大,而PostgreSQL是一种传统的RDBMS。无论PostgreSQL在全文搜索方面做得多么好,Elasticsearch都是为搜索大量的文本和文档(或记录)而设计的。搜索的内容越大,Elasticsearch在性能上就比PostgreSQL更好。此外,如果在将帖子存储到Elasticsearch之前将其预处理成几个字段和索引,您也可以获得许多好处和出色的性能。

如果你确实需要全文功能,你可以考虑MSSQL,它可能比PostgreSQL做得更好。

**回复评论:**在不同类型的数据库上进行属性比较应该是常识。因为OP没有提供存储的数据量和大小。如果这是小规模的搜索数据,可能选择Postgres或ES,两者都可以。但是,如果将来事务和数据存储库变得更大,ES将提供好处。

您可以检查this site以了解每种类型DB的当前排名,并选择最适合您的应用程序的需求、体系结构和未来数据增长的类型。

相关问题