与Elasticsearch相比,mongoDB和Postgres等数据库的搜索引擎做得怎么样?(2020年)



我正在开发一个网站,用户可以在该网站上创建数据库条目。这些条目都是相同的形式,所以到目前为止我使用的是Sqlite(带有FTS5(,这是我所知道的唯一数据库;(

然而,至关重要的是,用户可以在网站上搜索这些条目。全文搜索运行得很好(用户大致知道他们在寻找什么(,但我需要两个改进:

  1. 拼写错误应该会返回正确的条目(我已经看到了sqlite的拼写修复扩展,但我不知道它的效果如何(
  2. 更重要的是,如果用户在网站上输入了一些查询词,我会尝试用sql查询来匹配这些词。如果用户输入的单词太多,将返回0个匹配项:

例如:如果用户输入"sars新冠肺炎19〃;进入搜索栏:

CREATE VIRTUAL TABLE TEST USING FTS5(SomeText);
INSERT INTO TEST(SomeText) VALUES 
('Covid 19');
SELECT SomeText 
FROM TEST 
WHERE SomeText MATCH 'sars covid 19';

=>0匹配,但我希望它返回"新冠肺炎19"条目。

我意识到,对于一个需要很好地处理搜索的数据库来说,sqlite可能过于简单化了。现在我的问题是:Postgres或MongoDB是否有包含我需要的功能的搜索引擎?还是值得深入研究弹性搜索等解决方案。?

我在这方面发现的大多数文章都有5-10年的历史,所以我想知道数据库中搜索引擎的现状。非常感谢任何提示

组合es+mongodb运行良好,您可以在es中索引和执行全文搜索,并在mongodb中保留带有一些索引关键字段的原始文档。。。

Elasticsearch肯定能工作。你只需要考虑如何索引你的文档,你就可以用索引的方式找到它们,在你的上下文中,默认文本似乎可以使用匹配查询:

https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html

MongoDb在这种简单的情况下也可以工作:https://docs.mongodb.com/manual/text-search/,但是mongo无法使用tokenizer,所以如果你需要升级你的文本搜索,mongo将受到限制。

Postgresql可以做到,使用类似的东西,但我还不够熟悉,如果你有10k个条目,那肯定没问题,如果你期望100万,mongo或es会更好。

如果你必须在mongodb和es之间做出选择,你的问题必须更具体,对于全文,es真的很好,有很多功能,mongodb也提供了一些不错的数据库工具。有时es会更好,有时mongo,这取决于你需要什么。如果你只想要全文,es是必须的。

最新更新