我知道ElasticSearch是建立在Apache Lucene之上的,但我想知道两者之间的显著区别。
flvlnr441#
Elasticsearch是一个 * 基于JSON* 的,* 分布式 *,*Web服务器 *,构建在Lucene之上。虽然实际上是Lucene在做下面的工作,但是Elasticsearch为我们提供了一个在Lucene之上的方便的层。在Elasticsearch中创建的每个碎片都是一个单独的Lucene示例。所以总结一下
gjmwrych2#
此外**@Vineeth Mohan**还有一句话:
**高可用性:**Elasticsearch是分布式的,因此它可以管理数据复制,这意味着您的群集中有多个数据副本。这可以实现高可用性。强大的查询DSL:Elasticsearch为我们提供了JSON接口,用于在Lucene上阅读查询。多亏了Elasticsearch,你可以在不知道Lucene语法的情况下编写复杂的查询。Schemaless(Schema-Free):schema的字段(名称,值对)不需要预先定义。当您索引数据时,elasticsearch可以在运行时自动创建模式,就像变魔术一样。
schema
0dxa2lsx3#
我将从使用的Angular 来回答。Lucene是一个搜索引擎库。你可能想用它来构建你自己的搜索引擎:新的Elasticsearch或Solr竞争对手,或者针对您的用例的一些小东西(例如文本分析)。Elasticsearch是一个搜索引擎。大多数人使用它进行日志聚合、产品搜索或这两者的变体(例如,社交媒体分析或根据某些搜索条件查找相关人员)。它构建在Lucene之上,因此公开了它的大部分(尽管不是全部)特性。它还在上面添加了很多功能,最重要的是:
eit6fx6z4#
我会从另一个Angular 来讨论。
Elasticsearch索引是一个文档块,就像关系世界中的数据库由表组成一样。
为了实现扩展,我们将Elasticsearch索引分布到多个物理节点/服务器中。为此,我们将ElasticSearch索引分解为更小的单元,称为碎片。
问题:它与Lucene索引有何关系?
如果我们要搜索特定的术语(例如:“Cake”或“Cookie”),我们将必须检查每个碎片并查找它(先不考虑碎片是如何在每个节点上定位和复制的)。这个操作将花费很多时间--所以我们需要使用高效的数据结构来进行搜索-这就是Lucene的索引发挥作用的地方。每个Elasticsearch碎片都基于Lucene索引结构,并存储有关术语的统计信息,以使基于术语的搜索更加高效。(!)这是相当令人困惑的,因为单词“索引”和事实上,ElasticSearch碎片是ElasticSearch索引的一部分,但它是基于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)字段是一个命名的术语序列。
4条答案
按热度按时间flvlnr441#
Elasticsearch是一个 * 基于JSON* 的,* 分布式 *,*Web服务器 *,构建在Lucene之上。虽然实际上是Lucene在做下面的工作,但是Elasticsearch为我们提供了一个在Lucene之上的方便的层。在Elasticsearch中创建的每个碎片都是一个单独的Lucene示例。所以总结一下
gjmwrych2#
此外**@Vineeth Mohan**还有一句话:
**高可用性:**Elasticsearch是分布式的,因此它可以管理数据复制,这意味着您的群集中有多个数据副本。这可以实现高可用性。
强大的查询DSL:Elasticsearch为我们提供了JSON接口,用于在Lucene上阅读查询。多亏了Elasticsearch,你可以在不知道Lucene语法的情况下编写复杂的查询。
Schemaless(Schema-Free):
schema
的字段(名称,值对)不需要预先定义。当您索引数据时,elasticsearch可以在运行时自动创建模式,就像变魔术一样。0dxa2lsx3#
我将从使用的Angular 来回答。
Lucene是一个搜索引擎库。你可能想用它来构建你自己的搜索引擎:新的Elasticsearch或Solr竞争对手,或者针对您的用例的一些小东西(例如文本分析)。
Elasticsearch是一个搜索引擎。大多数人使用它进行日志聚合、产品搜索或这两者的变体(例如,社交媒体分析或根据某些搜索条件查找相关人员)。它构建在Lucene之上,因此公开了它的大部分(尽管不是全部)特性。它还在上面添加了很多功能,最重要的是:
eit6fx6z4#
我会从另一个Angular 来讨论。
ElasticSearch索引与Lucene索引。
Elasticsearch索引是一个文档块,就像关系世界中的数据库由表组成一样。
为了实现扩展,我们将Elasticsearch索引分布到多个物理节点/服务器中。
为此,我们将ElasticSearch索引分解为更小的单元,称为碎片。
问题:它与Lucene索引有何关系?
如果我们要搜索特定的术语(例如:“Cake”或“Cookie”),我们将必须检查每个碎片并查找它(先不考虑碎片是如何在每个节点上定位和复制的)。
这个操作将花费很多时间--所以我们需要使用高效的数据结构来进行搜索-这就是Lucene的索引发挥作用的地方。
每个Elasticsearch碎片都基于Lucene索引结构,并存储有关术语的统计信息,以使基于术语的搜索更加高效。
(!)这是相当令人困惑的,因为单词“索引”和事实上,ElasticSearch碎片是ElasticSearch索引的一部分,但它是基于Lucene索引的数据结构。
Bonus - Lucene的索引作为倒排索引
从下面的示例中可以看出,Lucene的索引存储了原始文档的内容以及附加信息,如术语词典和术语频率,这提高了搜索效率:
Lucene的索引福尔斯倒排索引家族,因为它可以列出包含某个术语的文档。
这与文档列出术语的自然关系相反。
(提醒)我们是如何从碎片到达术语的?
(1)Shard是包含文档的文件目录。
(2)文档是一系列字段。
(3)字段是一个命名的术语序列。