query求交模块总结

最近重新梳理了一下query的求交模块,记录一下。

以前不太清楚的地方,主要是怎么处理近义词(比如“蔡依林”和“Jolin”)以及怎么有些没全部命中term也可以找到。

第一个,在数据制作的过程中就会处理近义词,做到相应的倒排中(会标明近义词)。而且,求交的过程中,近义词也会一起参与求交。“蔡依林演唱会”其实是“蔡依林”“Jolin”“演唱会”三个词一起求交。这样就不会遗漏一些很相似的近义词,保证了召回率。

第二个,求交的结果并不是要求所有的term都命中,我看项目中,命中了两个就会作为一个candidate来计算rank,当然,如果命中的效果不好,由rank来淘汰这个candidate,并继续求交。如果命中的两个是近义词,那相当于只命中了一个,也应该是由rank来淘汰。

前面两个策略,保证了召回率,当然会对正确率和程序的效率有一定的影响,这个就要对结果综合考虑后指定策略。

另外,程序中还有一个跳关键域(jump key field,kf)的策略。比如“中国”“北京”“美女”,当求交一段时间,发现结果太稠密,很多doc可能都会包含,这样肯定会影响求交的效率,导致一些不好的结果被求交出来再淘汰,一些好的结果反而因为排得比较靠后而求交不出来。这时,可以在求交的过程中,只考虑少数几个关键的域(对结果影响比较大的域,比如title,desc等),加速了求交效率。

猜你喜欢

转载自onmyway-1985.iteye.com/blog/2398700