我们有超过 50 亿个文档需要为全文搜索建立索引。所有这些文件都是静态的,永远不需要更改。
经过大量研究,我们发现在 Redis 中使用咆哮位图来构建倒排索引非常快,而且资源极少。
现在的问题是,我们可以在 lucene 倒排索引中使用咆哮位图吗?
我们有超过 50 亿个文档需要为全文搜索建立索引。所有这些文件都是静态的,永远不需要更改。
经过大量研究,我们发现在 Redis 中使用咆哮位图来构建倒排索引非常快,而且资源极少。
现在的问题是,我们可以在 lucene 倒排索引中使用咆哮位图吗?
Lucene 多年来默认使用 Roaring 位图。它是在 2014 年添加的https://issues.apache.org/jira/browse/LUCENE-5983
Elias Fano 于 2015 年被移除。https://issues.apache.org/jira/browse/LUCENE-6484
使用咆哮位图的想法已经在 Lucene 世界中进行了评估。您可以在这里查看完整结果 - http://people.apache.org/~jpountz/doc_id_sets4.html
一般的想法是,虽然咆哮位图很有效,但它只能用于 2 个功能:
遍历所有匹配的文档(如果您运行恒定分数查询可能会出现这种情况)
前进到集合中包含的第一个 doc id,这通常用于过滤器和查询之间的交集
总而言之,我认为目前 Lucene 在大多数情况下都使用Elias-Fano编码,测量速度更快。这也意味着,您可以只使用 Lucene 并确信它在构建倒排索引和处理查询方面具有极快的速度