全文搜索 - 我应该选择专用搜索引擎(SOLR、Elastic)还是 RDBMS?

Gis*_*has 1 mysql lucene solr full-text-search elasticsearch

我正在准备我的文凭考试,主题是 Apache SOLR 中的全文搜索。在介绍中,我应该详细说明 Apache SOLR 的目的和优点,即为什么人们会选择像 SOLR 这样的全文搜索引擎而不是 MySQL。使用像“SOLR in action (2013)”这样的文献,人们会说很容易确定在那个时代何时使用 SOLR、ElasticSearch 或其他东西,而不是 MySQL。2010 年还有一个很棒的问题: Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL? 。唉,尽管 2010 年左右的答案很伟大,但现在看来答案已经过时了。例如“MySQL MyISAM 表类型支持全文搜索,但 InnoDB 不支持”。几年后,InnoDB 也添加了全文搜索支持。现在,有一些文章设法阐明了这一点,例如 https://lucidworks.com/post/full-text-search-engines-vs-dbms/其中指出全文搜索系统的优点是

搜索速度、各种索引和查询选项、排名和相关性功能...

然而,还有很多其他文章指出了诸如

MySQL 全文搜索现在可以在 80% 的情况下满足您的需求

等等,看来近10年来MySql、MongoDB、PostgreSQL等关系型数据库的全文检索能力急剧提升。

然而, https://db-engines.com/en/ranking_trend/system/Elasticsearch%3BMySQL%3BSolr上的图表显示,全文搜索引擎并没有失去人气,但它们的使用量正在增长,甚至 SOLR 也在失去速度渐渐地,现在似乎正在醒来。

那么,一定有什么事情吗?是那个吗:

  • SOLR、Elastic、Sphinx...仍然比它们的关系对应物快得多吗?
  • 还有更多的选项,比如高级的、可定制的标记化、分面?也许有更好的语言支持?
  • 关系数据库无法很好地处理大量文档的搜索?

ETC。

简而言之,是什么让您现在选择 Apache SOLR 或 Elastic,而不是 MySQL 或其他具有增强的全文搜索功能的关系数据库?如果您的关系数据库或 NoSQL 数据库中已经有数据,那么为什么 Apache SOLR 和 Elastic Search 仍然那么受欢迎,因为使用它们需要另一堆资源和管理?

所以核心问题是:如果我有一个使用 MySQL 数据库进行数据存储的系统,并且我需要为一个或多个字段添加全文搜索功能,包括模糊搜索(拼写错误)、同义词、词干提取,以处理相关性和排名以自定义方式,通常使用 MySQL FTS 更好(因此不需要另一堆资源和管理),还是像 Apache SOLR 或 Elastic search 这样的专用全文搜索引擎在这方面明显足够好?

Bil*_*win 5

Apache Solr、ElasticSearch、Sphinx Search 等专用索引解决方案通常比 MySQL 的内置全文索引或 PostreSQL 的 GIST 等更快。专用解决方案通常具有更多功能,如词干提取、更复杂的搜索(包括分面)以及存储额外的内容。与索引文本关联的“文档”中的数据。

\n

另一方面,使用这些补充解决方案之一意味着将数据复制到索引解决方案时会变得更加复杂。您需要多久更新一次索引?增量更新索引是否有效,或者您是否基本上需要破坏索引并从整个数据集创建新索引?

\n

而使用 RDBMS 的内置索引功能的优点是索引可能会自动与最新的数据更新保持同步。并且搜索功能可能足以满足您的需求。保持索引维护简单和自动化具有很多积极的价值。

\n

此外,任何解决方案,即使是次优解决方案,也比许多开发人员使用的 na\xc3\xafve 方法好几个数量级:textcolumn LIKE '%keyword%'

\n
\n

现在,是什么让您选择 Apache SOLR 或 Elastic,而不是 MySQL 或其他具有增强的全文搜索功能的关系数据库?

\n
\n

更好的性能、更复杂的搜索支持,它有助于将那些昂贵的搜索查询转移到专用搜索引擎,并减轻 RDBMS 的负载。

\n

  • 哦,卡文先生,但现在我发现,在发布这个问题之前我读了几分钟的幻灯片,这正是您的幻灯片,它确实是我在该主题上找到的最好的资源之一!我确信我会在我的工作中参考它。 (2认同)