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

Full-text search - should I pick dedicated search engine (SOLR, Elastic) or RDBMS one?

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

search speed, variety of indexing and querying options, ranking and relevancy capabilities...

然而,还有很多其他文章陈述类似

MySQL Full-Text Search will now fit your needs in 80% of cases

等,而且似乎在过去的 10 年里 MySql、MongoDB、PostgreSQL 和其他关系数据库的全文搜索能力急剧增加。

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

所以,一定有什么东西吧?是吗:

等等

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

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

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

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

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

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

what would make you take Apache SOLR or Elastic nowadays, instead of MySQL or other relational database with their increased Full-Text search capabilities?

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