J.S*_*S.C 35 postgresql full-text-search elasticsearch
嗨,在将搜索功能应用到我的服务中之前,我正在做一些研究。我目前使用 PostgreSQL 作为我的主要存储。我绝对可以使用 PostgreSQL 的内置全文搜索,但问题是我的数据分散在几个表中。
我的服务是一个电子商务网站。因此,如果客户搜索“好苹果笔记本电脑”,我需要连接Brand表、post表和review表(1 个帖子是多个评论 + 简短摘要的组合)以完全搜索所有帖子。如果我使用 elasticsearch,我可以通过预处理插入完整的帖子。
根据我的研究,有人说 PostgreSQL 的 FTS 和 elasticsearch 性能相似,有人说 elasticsearch 更快。对于我的情况,哪个是更好的解决方案?
提前致谢
Pao*_*rre 54
如果 PostgreSQL 已经在您的堆栈中,那么最适合您的选择是使用 PostgreSQL 全文搜索。
因为否则您必须将数据库内容提供给外部搜索引擎。
外部搜索引擎(例如 elasticsearch)速度很快,但是:
如果你想阅读更多关于 PostgreSQL 中 FTS 的内容,Oleg Bartunov 有一个很棒的演讲(我从这里提取了上面的列表):“你需要在 PostgreSQL 中进行全文搜索吗? ”
这是一个简短的示例,您可以在 SQL 中从多个表创建“文档”(阅读文本搜索文档):
SELECT to_tsvector(posts.summary || ' ' || brands.name)
FROM posts
INNER JOIN brands ON (brand_id = brands.id);
Run Code Online (Sandbox Code Playgroud)
如果您在电子商务网站上使用 Django,您还可以阅读我写的这篇文章“使用 PostgreSQL 在 Django 中进行全文搜索”
yur*_*ons 10
我找到了2021 年的研究以及一些基准
Postgresql 与 ElasticSearch 性能图
有用的结论
随着 PostgreSQL 的每个新版本,搜索响应时间都在改善,并且与 ElasticSearch 相比,它正在朝着同类比较的方向发展。因此,如果项目不打算拥有数百万条记录或大规模数据,Postgresql 全文搜索将是最佳选择。
Con*_*ers -14
简短回答: Elasticsearch 更好
说明: PostgreSQL 和 Elasticsearch 是两种不同类型的数据库。Elasticsearch 对于文档搜索功能强大,而 PostgreSQL 是传统的 RDBMS。无论 PostgreSQL 在全文搜索方面做得有多好,Elasticsearch 都是为搜索大量文本和文档(或记录)而设计的。而且你想要搜索的大小越大,Elasticsearch 的性能就越优于 PostgreSQL。此外,如果您在将帖子存储到 Elasticsearch 之前将帖子预处理到多个字段和索引中,您还可以获得许多好处和出色的性能。
如果你确实需要全文功能,你可以考虑MSSQL,它可能比PostgreSQL做得更好。
回复评论: 不同类型的DB的属性比较应该是常识。由于OP没有提供存储的数据量和大小。如果这是小规模的搜索数据,也许选择Postgres或ES,两者都可以。然而,如果未来交易和数据存储变得更大,ES 将带来好处。
您可以查看此网站,了解每种类型数据库的当前排名,并根据您的应用程序的需求、架构和未来数据增长选择最佳的一种。