【发布时间】:2011-02-05 19:58:18
【问题描述】:
我阅读了一些关于 Lucene 的文档;我也阅读了此链接中的文档 (http://lucene.sourceforge.net/talks/pisa)。
我不太了解 Lucene 如何索引文档,也不了解 Lucene 使用哪些算法进行索引?
在上面的链接中,它说 Lucene 使用这种算法进行索引:
- 增量算法:
- 维护一组段索引
- 为每个传入文档创建索引
- 将新索引推入堆栈
- 设 b=10 为合并因子; M=8
for (size = 1; size < M; size *= b) {
if (there are b indexes with size docs on top of the stack) {
pop them off the stack;
merge them into a single index;
push the merged index onto the stack;
} else {
break;
}
}
此算法如何提供优化的索引?
Lucene 是否使用 B-tree 算法或任何其他类似的算法进行索引 - 或者它有特定的算法?
【问题讨论】:
-
这里的大多数答案都是正确的,即第一个 Lucene 创建倒排索引,但这并不能解释该术语索引随后如何搜索的关键点(我相信,这是 OP 实际要求的)。因此,请在下面找到这个相当老的问题的新答案,希望能提供更好的见解。
-
再次更新了我的答案,因为当前的答案(包括我的!)对于回答 OP 的主要两个问题(Lucene 如何提供优化的索引以及通过哪种特定算法 - 跳过-列表,而不是 B 树,顺便说一句)。希望我的最终更新现在能正确回答实际问题!