搜索引擎如何在数百万(或数十亿个文档)上进行精确的短语匹配?

时间:2016-06-30 18:29:22

标签: web full-text-search

似乎无法对数十亿个文档进行精确的词组匹配,搜索引擎如何做到这一点?

我唯一的猜测是他们实际上并没有真正完成一个真正的短语匹配。他们有一个单词索引返回包含特定单词的每个文档,然后他们从"精确短语"中挑选单词。并与单词列表相交。例如,当我搜索"砍伐树"在Google的一个页面上,我得到的是How to Cut Down a Tree在Instructables上,但是在这个页面上没有任何地方有确切的短语" cut tree tree"。最接近的是"砍伐一棵树"这是一个不同的短语。所以,显然谷歌并没有真正做一个精确的短语匹配,只是一个伪匹配。

那么,使用大型语料库进行真正完全匹配是不可能的?

2 个答案:

答案 0 :(得分:0)

我对Google这样的大型语料库了解不多,但我对Apache Solr有自己的经验。要在Solr中进行精确搜索,您必须在引号中传递您的短语,例如" Google搜索神秘" 。但是,此类查询仅限制您只使用完全匹配,而不会限制其他文档,这些文档可能包含Google搜索,搜索神秘,Google神秘或更多此类真实世界组合等字词。因此,这里有与提升相关的查询,您可以为关键字提供相对提升值,以便确切的单词位于顶部,但随后的匹配也会出现。我的基于Solr的应用程序具有大约1,00,000个文档的索引,并且它工作正常。此外,我的应用程序有一个特定的用例,用于基于内容的精确搜索,这种搜索在很小的范围内运行良好。现在,在谷歌查询场景中,我不认为他们的搜索模型会对完全匹配的东西进行排序,这可能是有道理的。因为当你搜索"砍伐树"可能有包含该确切短语的结果,但该网站可能不被视为与用户相关,因为Google会考虑很多因素,例如网页访问,返回页面的链接,广泛搜索的热门内容定期。因此,完全匹配不仅是谷歌等搜索引擎在从数百万个文档中挖掘出最佳内容时仍会记住的参数。

答案 1 :(得分:0)

来你的榜样" a"在"砍伐一棵树"可能是一个禁用词,并被排除在索引和查询之外。

搜索引擎如何运作?它们维护一个倒排索引,即索引和它们出现在哪个文档中。此外,它们保留一个术语位置,即文档中出现单词的位置。这样,他们可以收集与查询匹配的文档列表,但也可以执行短语和邻近匹配等操作。

例如,我们可能有条款

Term    Doc    Pos
cut     1      7
        5      27
down    1      8
        5      7
tree    1      9
        5      98

我们可以看到Doc 1和Doc 5匹配,但只有Doc 1与短语匹配(不包括停用词)。