一般来说,用户在搜索的时候,搜索词往往会非常简短,很难完全体现用户的实际意图。而如果我们无法准确地理解用户的真实意图,那搜索结果的准确性就无从谈起了。因此,搜索引擎中检索系统的第一步,一定是进行查询分析。具体来说,就是理解用户输入的搜索词,并且对输错的查询词进行查询纠正,以及对意图不明的查询词进行查询推荐。那查询分析具体该怎么做呢?
在查询分析的过程中,我们主要会对搜索词进行分词粒度分析、词的属性分析、用户需求分析等工作。其中,分词粒度分析直接关系到我们以什么 key 去倒排索引中检索,而属性分析和需求分析则可以帮助我们在打分排序时,有更多的因子可以考虑。因此,分词粒度分析是查询分析的基础。那什么是分词粒度分析呢?
分词粒度分析是中文搜索中特有的一个环节。因为中文词和英文词相比,最大的区别是词与词之间没有明确的分隔标志(空格)。因此,对于中文的搜索输入,我们要做的第一件事情,是使用分词工具进行合理的分词。但分词,就会带来一个分词粒度的问题。
比如说,当用户输入「极客时间」时:如果我们按单字来切分,这个搜索词就会变成「极 / 客 / 时 / 间」这四个检索词;如果是按「极客 / 时间」来切分,就会变成两个检索词的组合;如果是不做任何分词,将「极客时间」当成一个整体,那就是一个搜索短语。切分的方式这么多,到底我们该怎么选择呢?
一般来说,我们会使用默认的标准分词粒度再结合整个短语,作为我们的检索关键词去倒排索引中检索,这就叫作混合粒度的分词方式。那「极客时间」就会被分为【极客、时间、极客时间】这样的检索词组合。如果检索后返回的结果数量不足,那我们还会去查询【极、客、时、间】这样的更细粒度的单字组合。