elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene 倒排索引vs二叉树vs。。。?

Lucene 倒排索引vs二叉树vs。。。?,lucene,elasticsearch,Lucene,elasticsearch,我一直在使用弹性搜索(由下面的Lucene提供支持),而且它非常棒。无论我朝它扔什么,它都燃烧得很快 我想知道为什么现在很快。我知道它使用的是倒排索引,我也部分了解它是基于我找到的几篇文章和一些好的youtube视频来解释的,但为什么这比Mysql或Mongo中的二叉树要快得多呢?我知道这有点像苹果对桔子的比较,但我还没有找到任何真正好的解释(比如并排)来解释倒排索引和二叉树索引是如何工作的 到目前为止,我收集到的唯一一件事是,基于索引时间,反向索引总是会更快,因为它不必重新平衡树的叶子(分形索

我一直在使用弹性搜索(由下面的Lucene提供支持),而且它非常棒。无论我朝它扔什么,它都燃烧得很快

我想知道为什么现在很快。我知道它使用的是倒排索引,我也部分了解它是基于我找到的几篇文章和一些好的youtube视频来解释的,但为什么这比Mysql或Mongo中的二叉树要快得多呢?我知道这有点像苹果对桔子的比较,但我还没有找到任何真正好的解释(比如并排)来解释倒排索引和二叉树索引是如何工作的


到目前为止,我收集到的唯一一件事是,基于索引时间,反向索引总是会更快,因为它不必重新平衡树的叶子(分形索引也是如此)。

这都是关于权衡的问题

Lucene的索引与B树非常不同,它基于一次写入的段。对于每个段,都有一个和。查找一个术语需要阅读术语词典中有关该术语的一些信息,然后跳转到其发布列表的开头,在那里您可以按顺序阅读与该术语匹配的文档列表。术语词典中的查找基于二进制搜索的变体,以便能够高效地运行范围查询

每次添加文档时,都会创建一个新的段(这就是为什么Lucene更擅长批量更新),当段的数量达到一个可配置的阈值(称为合并因子)时,一些段会合并在一起(基于合并因子)


这种设计允许Lucene高效地运行许多查询,但另一方面,Lucene仍然不太擅长原子单文档更新(因为每次提交都需要刷新一个新的段,而且无论修改有多大,都需要重新编制整个文档的索引)。目前正在进行与搜索相关的工作,但这仍然是实验性的。

可能重复的While确实有帮助,我非常希望能够在搜索过程的每一步中并排解释每一步所做的工作。我可以推荐这本书;关于索引构造和压缩的章节很好地解释了基本IR索引的工作原理。