Lucene位置索引是如何高效工作的



通常,任何搜索引擎软件都会创建反向索引,以加快搜索速度。基本格式是:-

word: <docnum ,positions>, <docnum ,positions>, <docnum ,positions> .....

每当在像"Harry Potter Movies"这样的引号内有搜索查询时,这意味着单词的位置应该完全匹配,而在像hello /4 world这样的k个单词内的搜索中,这通常意味着从单词hello向左或向右找到4个单词距离范围内的单词世界。我的问题是,我们可以像在查询中那样使用线性检查帖子和计算单词距离的解决方案,但如果收集量真的很大,我们就不能真正搜索所有帖子。那么,lucene或solr是否有其他数据结构或优化用途?

第一个解决方案是每个单词只能搜索k个帖子。其他解决方案只能搜索顶级文档(通常称为冠军列表,在索引过程中按tf idf排序或类似(,但可以忽略更多更好的文档。这两种解决方案都有一些缺点,它们都不能确保质量。但在Solr服务器中,即使在大型集合中,我们也能确保结果的质量。怎样

您在这里询问的短语查询实际上非常有效地计算的位置,因为您要的是出现"哈利"、"波特"one_answers"电影"的文档。

Lucene非常聪明,但其算法的核心是,它只需要访问所有三个术语都出现的文档的位置列表。

Lucene的帖子也被分为多个文件:计数文件包括:(Document,TF,PositionsAddr(+位置文件内有:(PositionsArray(

因此,它可以为这三个术语中的每一个扫过(doc,tf,pos_addr(,并且只有当这三个词都出现在特定文档中时才查阅PositionsArray。短语查询有机会非常快速,因为您最多只访问最不频繁术语的所有文档。

如果你想看到短语查询运行缓慢(并进行大量磁盘查找!(,请尝试:"成为或不成为。。。这里的AND部分没有多大帮助,因为所有的术语都很常见。

最新更新