ElasticSearch与SQL全文搜索的比较

39

我希望在我的项目中使用全文搜索...有人能够解释一下ElasticSearch和SQL全文搜索之间的区别吗?

或者

为什么SQL全文搜索比ElasticSearch更好(更差)?

文档、演示、模式...

2个回答

55

如何定义“更好”... SQL全文搜索相对容易实现(建立索引和查询),但有一些缺点:

  • 几乎无法控制索引的方式(索引键是什么、词法分析器/词干提取器等)
  • 在通常不太可扩展的SQL服务器上运行

Elasticsearch需要更多的工作:您需要设置并维护专用节点集群,并提供执行实际索引操作的代码,还可能涉及定期工作(处理新数据/编辑后的数据的变更日志),构建要索引的片段。同样,您需要花费更多时间来构建查询。但您可以获得更多关于索引和查询的控制以及可扩展性(集群可以根据需要进行调整)。如果有帮助的话,Stack Overflow最初使用的是SQL全文搜索,当限制(功能和性能)变得禁锢时,转向了Elasticsearch。


1
一些反馈:http://nitschinger.at/Elastic-Search-and-SQL-Server-are-sitting-in-a-tree - rudi bruchez
@rudibruchez 我不确定那是否算是“反馈”,但这是一个有趣且相关的链接。 - Marc Gravell
你说得对,我提到反馈是因为作者在评论jTDS和ms JDBC驱动程序之间的区别,但这只是文章中的一个句子。它主要是教程。顺便说一下:Sphinx是C++竞争者:http://sphinxsearch.com/about/sphinx/。 - rudi bruchez
1
StackOverflow起初使用Lucene.NET,后来转向了Elasticsearch。 - DaNeSh
@DaNeSh 嗯,我们没有使用 Lucene 很长时间,所以我没提到它。 - Marc Gravell

7
答案取决于您试图达到的目标以及达到目标的资源。SQL Server全文搜索管理较低,但功能有限。Elasticsearch则在光谱的另一端。
SQL Server全文搜索:
- 如果您的数据不断增长或模式随时间改变,则可能证明效率高。 - 维护需要的工作量较小,学习曲线/需要新的技能也较少。
Elasticsearch:
- 如果您的主数据库正在经常增量更新(logstash和其他替代品),则需要进行数据摄取。 - 水平扩展更好。 - 能够使用高级功能来提高非常大型数据集的性能(例如路由)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接