Lucene和Elasticsearch有什么区别

Sat*_*wal 114 lucene elasticsearch

我知道ElasticSearch是基于Apache Lucene构建的,但我想知道两者之间的重大差异.

Vin*_*han 184

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

Elasticsearch是一个JSON基于,分布式,网络服务器构建了Lucene的.虽然Lucene正在做下面的实际工作,但Elasticsearch为我们提供了一个比Lucene更方便的层.Elasticsearch中的每个共享都是一个单独的Lucene实例.总结一下

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

  • 不确定这是否可以回答您的问题,但是每个Elasticsearch节点都包含碎片.使用Shards在节点之间分布单个Elasticsearch索引.每个Shard都在Elasticsearch Index中保存一部分文档.这些分片中的每一个都是Lucene的一个实例.因此,在根目录中,所有数据都存储在Lucene中,Elasticsearch管理交互. (9认同)

fgu*_*gul 24

除了@Vineeth Mohan的话:

高可用性: Elasticsearch是分布式的,因此可以管理数据复制,这意味着在群集中拥有多个数据副本.这样可以实现高可用性.

功能强大的查询DSL:Elasticsearch为我们提供了用于读取和编写查询的JSON接口,最重要的是Lucene.Thanks到Elasticsearch,这样您就可以在不知道Lucene语法的情况下编写复杂的查询.

Schemaless(Schema-Free):之前schema不必定义字段(名称,值对).当您索引数据时,elasticsearch可以在运行时自动创建模式,就像魔术一样.


Rtm*_*tmY 12

我将添加另一个角度来进行讨论。

\n

Elasticsearch 索引 VS Lucene 索引。

\n

Elasticsearch索引是一大块文档,就像关系世界中的数据库由表组成一样。
为了实现扩展,我们将 Elasticsearch 索引分散到多个物理节点/服务器中。

\n

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

\n

问:它和Lucene索引有什么关系?
\n如果我们想要搜索特定术语(例如:“ Cake ”或“ Cookie ”),我们必须遍历每个分片并查找它(让我们先不考虑分片在每个节点上的定位和复制方式) 。

\n

这个操作会花费很多时间——所以我们需要使用一个高效的数据结构来进行这个搜索——这就是Lucene的索引发挥作用的地方。

\n

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

\n

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

\n
\n

Bonus - Lucene 的索引作为倒排索引

\n

从下面的例子可以看出,Lucene的索引存储了原始文档\xe2\x80\x99s的内容以及附加信息,例如术语词典和术语频率,这\n提高了搜索效率:

\n
Term           Document                 Frequency\nCake           doc_id_1, doc_id_8       4 (2 in doc_id_1, 2 in doc_id_8)\nCookie         doc_id_1, doc_id_6       3 (2 in doc_id_1, 1 in doc_id_6)\nSpaghetti      doc_id_12                1 (1 in doc_id_12)\n
Run Code Online (Sandbox Code Playgroud)\n

Lucene 的索引属于称为倒排索引的索引系列。这是因为它可以针对某个术语列出包含该术语的文档。
\n这是自然关系的反面,其中文档列出了术语。

\n
\n

(提醒)我们是如何从分片变成术语的?

\n

(1) Shard是包含文档的文件目录。
\n(2) 文档是一系列字段。
\n(3) 字段是术语的命名序列。

\n


小智 9

我从使用的角度来回答。

Lucene 是一个搜索引擎。您希望使用它来构建自己的搜索引擎:要么是新的 Elasticsearch 或 Solr 竞争对手,要么是适合您的用例的搜索引擎(例如文本分析)。

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

  • 休息API
  • 查询DSL
  • 分布式系统(分片、复制、集群管理)
  • 方面/聚合
  • 常见用途(例如摄取处理)和管理(用于监控其相关指标、备份和恢复等的 API)的附加功能