首页 > 解决方案 > 搜索引擎中的高效低基数与

问题描述

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

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

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

有没有一种方法可以执行 AND 查询,而不必考虑可能包含数十亿个文档的术语的交集?

标签: searchindexinglucenesearch-engineinverted-index

解决方案


术语程序存在于多个文档中,这意味着对程序和代码的查询将需要对非常大的文档集执行交集。

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

学期1AND学期AND2 学期3

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

您从查询中检索包含最少常见术语的文档。那些是候选人。然后,您使用有限状态机通过查询对这些候选者进行过滤和评分。

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

  1. 从引理或词干或术语到文档频率的映射(如在 tfidf 中)
  2. 允许检索包含给定引理的文档的实际倒排索引
  3. 文档 id 与文档的全文表示或只是词袋之间的映射,具体取决于您的查询逻辑的高级程度。

然后 filter + score 步骤可以并行发生


推荐阅读