PostgreSQL(全文搜索)vs ElasticSearch

嗨,在将搜索功能实现到服务中之前,我正在做一些研究。 我目前正在使用PostgreSQL作为主要存储。我当然可以使用PostgreSQL的内置全文搜索,但是问题是我的数据分散在几个表中。

我的服务是一个电子商务网站。因此,如果客户搜索“好的苹果笔记本电脑”,则需要将Brand表,post表和review表(1个帖子是几条评论+简短摘要的组合)进行完全合并搜索所有帖子。如果要使用elasticsearch,则可以通过预处理插入完整的帖子。

根据我的研究,有人说PostgreSQL的FTS和elasticsearch具有相似的性能,而有人说elasticsearch更快。哪种方法适合我的情况?

预先感谢

mmp634174342 回答:PostgreSQL(全文搜索)vs ElasticSearch

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

为什么要在PostgreSQL中进行全文本搜索(FTS)?

因为否则必须将数据库内容提供给外部搜索引擎。

外部搜索引擎(例如elasticsearch)非常快速

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

如果您想了解有关PostgreSQL中FTS的更多信息,Oleg Bartunov会做一个很棒的演讲(我从这里提取了上面的列表):“ Do you need a Full-Text Search in PostgreSQL ?

这是一个简短示例,说明如何从SQL的多个表中创建“文档”(阅读text search文档):

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”上写的这篇文章

,

简短答案: Elasticsearch更好

说明: PostgreSQL和Elasticsearch是2种不同的数据库。 Elasticsearch具有强大的文档搜索功能,而PostgreSQL仍然是传统的RDBMS。检查您的目标,即您可能想搜索某些帖子中的文本。无论PostgreSQL在全文搜索中做得如何,Elasticsearch都可以搜索大量文本和文档(或记录)。而且,您可能想要搜索的大小越大,Elasticsearch的性能就比PostgreSQL更好。此外,如果在存储到Elasticsearch中之前将帖子预处理为几个字段和索引,则还可以获得很多好处和出色的性能。

如果您确实需要全文功能,则可以考虑使用MSSQL,它可能比PostgreSQL更好。

评论回复:比较那些不同类型的DB的属性应该是常识。由于OP没有提供存储的数据量和大小。如果这是小型搜索数据,则可以选择Postgre或ES都可以。但是,如果将来事务和数据存储库变得如此之大,ES将受益匪浅。

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

本文链接:https://www.f2er.com/3119853.html

大家都在问