嗨,我在我的服务中实现搜索功能之前做了一些研究。我目前使用PostgreSQL作为我的主存储。我当然可以使用PostgreSQL的内置全文搜索,但问题是我的数据分散在几个表中。
我的服务是一个电子商务网站,所以如果一个客户搜索“好苹果笔记本电脑”,我需要连接Brand
表,post
表和review
表(1个帖子是几个评论+简短摘要的组合)来完全搜索所有帖子。如果我使用elasticsearch,我可以通过预处理插入完整的帖子。
根据我的研究,有些人说PostgreSQL的FTS和ElasticSearch有相似的性能,有些人说ElasticSearch更快。
先谢了
3条答案
按热度按时间mrfwxfqh1#
如果PostgreSQL已经在您的堆栈中,最好的选择是使用PostgreSQL全文搜索。
为什么要在PostgreSQL中使用全文搜索(FTS)?
因为否则您必须将数据库内容提供给外部搜索引擎。
外部搜索引擎(如elasticsearch)速度很快但:
如果你想了解更多关于PostgreSQL中的FTS的信息,有一个很棒的演讲,作者是Oleg Bartunov(我从这里摘录了上面的列表):"Do you need a Full-Text Search in PostgreSQL ?"
这是一个简短的例子,你可以创建一个“文档”(阅读文本搜索文档)从多个表在SQL:
如果你正在使用Django作为你的电子商务网站,你也可以阅读我写的这篇文章"Full-Text Search in Django with PostgreSQL"
6za6bjd02#
我找到了2021年的一些基准研究
Postgresql vs ElasticSearch performance graph
cwdobuhd3#
**简短回答:**Elasticsearch更好
**说明:**PostgreSQL和Elasticsearch是两种不同类型的数据库。Elasticsearch在文档搜索方面功能强大,而PostgreSQL是一种传统的RDBMS。无论PostgreSQL在全文搜索方面做得多么好,Elasticsearch都是为搜索大量的文本和文档(或记录)而设计的。搜索的内容越大,Elasticsearch在性能上就比PostgreSQL更好。此外,如果在将帖子存储到Elasticsearch之前将其预处理成几个字段和索引,您也可以获得许多好处和出色的性能。
如果你确实需要全文功能,你可以考虑MSSQL,它可能比PostgreSQL做得更好。
**回复评论:**在不同类型的数据库上进行属性比较应该是常识。因为OP没有提供存储的数据量和大小。如果这是小规模的搜索数据,可能选择Postgres或ES,两者都可以。但是,如果将来事务和数据存储库变得更大,ES将提供好处。
您可以检查this site以了解每种类型DB的当前排名,并选择最适合您的应用程序的需求、体系结构和未来数据增长的类型。