Lucene和Elasticsearch有什么区别?

209

我知道ElasticSearch是建立在Apache Lucene之上的,但我想了解两者之间的显著区别。

4个回答

332

Lucene是一个Java库,您可以将其包含在您的项目中并通过函数调用引用它的功能。

Elasticsearch是基于JSON的、分布式的、构建在Lucene之上的Web服务器。虽然实际工作是由Lucene完成的,但Elasticsearch为我们提供了一个方便的层来处理Lucene。在Elasticsearch中创建的每个分片都是一个单独的Lucene实例。因此,总结一下:

  1. Elasticsearch是基于Lucene构建的,提供了一个基于JSON的REST API来引用Lucene的功能。
  2. Elasticsearch在Lucene之上提供了一个分布式系统。分布式系统并不是Lucene所知道或构建的内容。 Elasticsearch提供了这个分布式结构的抽象。
  3. Elasticsearch提供其他支持功能,如线程池、队列、节点/集群监控API、数据监控API、集群管理等。

1
在DataStore方面,两者之间有什么区别吗? - AlikElzin-kilaka
数据存储怎么样? - Rookian
16
不确定这是否回答了有关DataStore的问题,但每个Elasticsearch节点都包含分片。单个Elasticsearch索引使用分片在节点之间分布。每个分片保存Elasticsearch索引中的一部分文档。每个分片都是Lucene的一个实例。因此,在根级别上,所有数据都存储在Lucene中,而Elasticsearch管理交互。 - Airn5475

47

除了@Vineeth Mohan的话之外:

高可用性:Elasticsearch是分布式的,因此它可以管理数据复制,这意味着在集群中有多个数据副本。这使得高可用性成为可能。

强大的查询DSL:Elasticsearch为我们提供了JSON接口,用于在Lucene之上读取和编写查询。由于Elasticsearch的存在,您可以编写复杂的查询,而无需了解Lucene语法。

无模式(无架构):schema字段(名称-值对)不必事先定义。当您索引数据时,elasticsearch可以在运行时自动创建模式,就像魔术一样。


10

我会在讨论中加入另一个角度。

Elasticsearch索引与Lucene索引的区别

Elasticsearch索引就像关系型数据库中的表格一样,是一组文档。为了实现扩展性,我们将Elasticsearch索引分布在多个物理节点/服务器上。

为此,我们将Elasticsearch索引分成较小的单元,称为分片

问题:它如何与Lucene索引相关联?
如果我们要搜索特定的术语(例如:“Cake”或“Cookie”),我们需要查看每个分片并查找它(让我们暂时放置如何定位和复制每个节点上的分片)。

这个操作需要很长时间 - 因此我们需要使用高效的数据结构进行搜索 - 这就是Lucene索引发挥作用的地方。

每个Elasticsearch分片都基于Lucene索引结构并存储有关术语的统计信息,以便使基于术语的搜索更有效率。

(!) 这非常令人困惑,因为有“索引”这个词,而且Elasticsearch分片是Elasticsearch索引的一部分,但是基于Lucene索引的数据结构。


额外内容 - Lucene的倒排索引

如下面的示例所示,Lucene索引存储原始文档的内容以及额外信息,例如术语字典和术语频率,从而增加搜索效率:

Term           Document                 Frequency
Cake           doc_id_1, doc_id_8       4 (2 in doc_id_1, 2 in doc_id_8)
Cookie         doc_id_1, doc_id_6       3 (2 in doc_id_1, 1 in doc_id_6)
Spaghetti      doc_id_12                1 (1 in doc_id_12)

Lucene的索引属于倒排索引家族。这是因为它可以列出包含某个词条的文档。
这与自然关系相反,自然关系中是文档列出词条。


(提醒)我们如何从分片到词条?

(1) 分片是一个包含文档的文件目录。
(2) 文档是字段序列。
(3) 字段是命名序列的词条。


9

从使用的角度来看,我将回答这个问题。

Lucene是一个搜索引擎。您可以使用它构建自己的搜索引擎:无论是新的 Elasticsearch 或 Solr 竞争对手,还是针对您的用例(例如文本分析)的特定搜索引擎。

Elasticsearch 是一个搜索引擎。大多数人将其用于日志聚合、产品搜索或这两者的变体(例如社交媒体分析或根据某些搜索标准查找相关人员)。它建立在 Lucene 之上,因此它公开了大部分(但不是全部)的功能。它还添加了许多功能,最重要的是:

  • REST API
  • 查询 DSL
  • 分布式系统(分片、复制、集群管理)
  • facets/aggregations
  • 常见用途的其他功能(例如摄取处理)和管理(用于监视其相关指标、备份和还原等的API)

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