【发布时间】:2014-12-11 06:01:49
【问题描述】:
从数据结构的角度来看,Lucene (Solr/ElasticSearch) 是如何如此快速地进行过滤术语计数的?例如,给定所有包含单词“bacon”的文档,找出这些文档中所有单词的计数。
首先,作为背景,我了解 Lucene 依赖于类似于 CONCISE 的压缩位数组数据结构。从概念上讲,这个位数组为每个不匹配术语的文档保存一个 0,为每个匹配一个术语的文档保存一个 1。但是很酷/很棒的部分是这个数组可以被高度压缩并且在布尔运算中非常快。例如,如果您想知道哪些文档包含术语“red”和“blue”,那么您获取对应于“red”的位数组和对应于“blue”的位数组,并将它们相加得到对应于的位数组匹配文件。
但是 Lucene 如何快速确定文档中匹配“bacon”的所有单词的计数?在我幼稚的理解中,Lucene 必须将与 bacon 关联的位数组与其他每个单词的位数组相结合。我错过了什么吗?我不明白这如何有效。此外,这些位阵列是否必须从磁盘中取出?这听起来更糟!
魔法效果如何?
【问题讨论】:
-
您能链接到您正在谈论的功能的 JavaDoc 吗?我正在查找“过滤后的术语计数”,结果为空。
标签: data-structures solr lucene elasticsearch