search - 搜索引擎中的高效低基数与
问题描述
Lucene 等搜索引擎如何执行 AND 查询,其中一个术语对数据集中的许多文档是通用的?例如,在一个倒排索引中:
term | document_id
---------------------
program | 1, 2, 3, 5...
python | 1, 4
code | 4
c++ | 4, 5
该术语program
出现在多个文档中,这意味着查询program AND code
将需要对非常大的文档集执行交集。
有没有一种方法可以执行 AND 查询,而不必考虑可能包含数十亿个文档的术语的交集?
解决方案
术语程序存在于多个文档中,这意味着对程序和代码的查询将需要对非常大的文档集执行交集。
是的。假设您有以下查询:
学期1
AND
学期AND
2 学期3
您首先需要计算每个正词的文档频率。您选择计数最少的单词。
您从查询中检索包含最少常见术语的文档。那些是候选人。然后,您使用有限状态机通过查询对这些候选者进行过滤和评分。
所以数据库有几个子空间:
- 从引理或词干或术语到文档频率的映射(如在 tfidf 中)
- 允许检索包含给定引理的文档的实际倒排索引
- 文档 id 与文档的全文表示或只是词袋之间的映射,具体取决于您的查询逻辑的高级程度。
然后 filter + score 步骤可以并行发生
推荐阅读
- asp.net-mvc - 在 AspNetCore Mvc 中使用依赖注入配置 CookieAuthenticationOptions
- android - Android:找不到 com.wix:detox:+ 的任何匹配项,因为没有可用的 com.wix:detox 版本
- android - 如何检测可访问性服务中 onKeyEvent 中键的双击?
- rest - 尝试使用 REST API 对 SharePoint 访问进行身份验证时 STS 请求无效
- angular - 如何通过 TypeScript 将字符串转换为日期
- python - 使用相同的配色方案可视化多个二维阵列
- here-api - HERE 地图中有许多 SVG DomMarker 会导致延迟
- reload - 有没有办法重新加载数值增加的网页?
- html - LeafletJS 1.6.0 地图涵盖了适用于 0.7.2 的 DIV
- swift - 在 xcode 中启用和禁用按钮