Lucene和Elasticsearch有什么区别

mspsb9vt  于 2022-11-07  发布在  Lucene
关注(0)|答案(4)|浏览(329)

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

flvlnr44

flvlnr441#

  • Lucene是一个Java库*。您可以将它包含在项目中,并使用函数调用来引用它的函数。

Elasticsearch是一个 * 基于JSON* 的,* 分布式 *,*Web服务器 *,构建在Lucene之上。虽然实际上是Lucene在做下面的工作,但是Elasticsearch为我们提供了一个在Lucene之上的方便的层。在Elasticsearch中创建的每个碎片都是一个单独的Lucene示例。所以总结一下

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

gjmwrych2#

此外**@Vineeth Mohan**还有一句话:

**高可用性:**Elasticsearch是分布式的,因此它可以管理数据复制,这意味着您的群集中有多个数据副本。这可以实现高可用性。
强大的查询DSL:Elasticsearch为我们提供了JSON接口,用于在Lucene上阅读查询。多亏了Elasticsearch,你可以在不知道Lucene语法的情况下编写复杂的查询。
Schemaless(Schema-Free):schema的字段(名称,值对)不需要预先定义。当您索引数据时,elasticsearch可以在运行时自动创建模式,就像变魔术一样。

0dxa2lsx

0dxa2lsx3#

我将从使用的Angular 来回答。
Lucene是一个搜索引擎。你可能想用它来构建你自己的搜索引擎:新的Elasticsearch或Solr竞争对手,或者针对您的用例的一些小东西(例如文本分析)。
Elasticsearch是一个搜索引擎。大多数人使用它进行日志聚合、产品搜索或这两者的变体(例如,社交媒体分析或根据某些搜索条件查找相关人员)。它构建在Lucene之上,因此公开了它的大部分(尽管不是全部)特性。它还在上面添加了很多功能,最重要的是:

  • REST API
  • 查询DSL
  • 分布式系统(分片、复制、群集管理)
  • 刻面/aggregations
  • 其他通用功能(例如ingest处理)和管理功能(用于监控其relevant metrics、备份和恢复等的API)
eit6fx6z

eit6fx6z4#

我会从另一个Angular 来讨论。

ElasticSearch索引与Lucene索引。

Elasticsearch索引是一个文档块,就像关系世界中的数据库由表组成一样。

为了实现扩展,我们将Elasticsearch索引分布到多个物理节点/服务器中。
为此,我们将ElasticSearch索引分解为更小的单元,称为碎片

问题:它与Lucene索引有何关系?

如果我们要搜索特定的术语(例如:“Cake”或“Cookie”),我们将必须检查每个碎片并查找它(先不考虑碎片是如何在每个节点上定位和复制的)。
这个操作将花费很多时间--所以我们需要使用高效的数据结构来进行搜索-这就是Lucene的索引发挥作用的地方。
每个Elasticsearch碎片都基于Lucene索引结构,并存储有关术语的统计信息,以使基于术语的搜索更加高效。
(!)这是相当令人困惑的,因为单词“索引”和事实上,ElasticSearch碎片是ElasticSearch索引的一部分,但它是基于Lucene索引的数据结构。

Bonus - 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)Shard是包含文档的文件目录。
(2)文档是一系列字段。
(3)字段是一个命名的术语序列。

相关问题