gpt4 book ai didi

data-structures - Lucene (Solr/ElasticSearch) 是如何快速进行过滤词条计数的?

转载 作者:行者123 更新时间:2023-11-29 02:44:53 25 4
gpt4 key购买 nike

从数据结构的角度来看,Lucene(Solr/ElasticSearch)如何如此快速地进行过滤词计数?例如,给定所有包含单词“bacon”的文档,查找这些文档中所有单词的计数。

首先,作为背景,我了解到 Lucene 依赖于类似于 CONCISE 的压缩位数组数据结构。 .从概念上讲,这个位数组为每个不匹配术语的文档保存一个 0,为每个匹配术语的文档保存一个 1。但是很酷/很棒的部分是这个数组可以高度压缩并且在 bool 运算中非常快。例如,如果您想知道哪些文档包含术语“red”和“blue”,那么您可以获取对应于“red”的位数组和对应于“blue”的位数组,并将它们放在一起得到对应于匹配文档。

但是 Lucene 如何快速确定文档中匹配“bacon”的所有单词的计数呢?在我天真的理解中,Lucene 必须采用与 bacon 相关联的位数组,并将它与每个其他单词的位数组进行 AND 运算。我错过了什么吗?我不明白这怎么会有效率。另外,这些位阵列是否必须从磁盘中取出?这听起来更糟!

魔术如何运作?

最佳答案

您可能已经知道这一点,但说 Lucene 使用倒排索引也没什么坏处。在这种索引技术中,为所有文档中出现的每个单词制作了一个字典,并针对每个单词存储了关于该单词出现的信息。类似这张图片的东西 enter image description here

为了实现这一点,Lucene 以不同的文件格式存储文档、索引及其元数据。点击此链接了解文件详细信息 http://lucene.apache.org/core/3_0_3/fileformats.html#Overview

如果您阅读文档编号部分,每个文档都会被赋予一个内部 ID,因此当找到包含单词“consign”的文档时,lucene 引擎会引用它的元数据。请参阅概述部分以查看在不同的 lucene 索引中保存了哪些数据。现在我们有了指向存储文档的指针,Lucene 可能会通过以下方式之一获取它

  1. 如果存储文档,则真正统计字数
  2. 使用术语词典、频率和邻近度数据来获取计数。

最后,您使用哪个 API 来“快速确定所有单词的计数”

图片来源 http://leanjavaengineering.wordpress.com/

在这里检查索引文件格式 http://lucene.apache.org/core/8_2_0/core/org/apache/lucene/codecs/lucene80/package-summary.html#package.description

关于data-structures - Lucene (Solr/ElasticSearch) 是如何快速进行过滤词条计数的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com