搜索引擎中的高效低基数 AND

Efficient low-cardinality ANDs in a search engine

搜索引擎(如 Lucene 等)如何执行 AND 查询,其中一个术语对于数据集中的许多文档都是通用的?例如,在一个倒排索引中:

term    | document_id
---------------------
program | 1, 2, 3, 5...
python  | 1, 4
code    | 4
c++     | 4, 5

术语 program 出现在多个文档中,这意味着 program AND code 的查询需要对大量文档执行交集。

有没有一种方法可以执行 AND 查询,而不必对潜在数十亿文档中包含的术语求交集?

the term program is present in several documents meaning a query of program AND code would require performing an intersection upon a very large set of documents.

是的。假设您有以下查询:

term1 AND term2 AND term3

您首先需要计算每个 正项 文档频率 。您选择计数最少的单词。

您从查询中检索了包含最不常用术语的文档。那些是候选人。然后你用有限状态机的查询过滤和评分那些候选者。

所以数据库有几个子空间:

  1. 从词条或词干或术语到文档频率的映射(如在 tfidf 中)
  2. 允许检索包含给定词条的文档的实际 inverted-index
  3. 文档 ID 和文档的全文表示形式之间的映射,或者只是词袋,具体取决于您的查询逻辑的高级程度。

然后过滤器+评分步骤可以并行发生