搜索引擎中如何将动态数据(比如点击数)加入到最终排序中

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/everlasting_188/article/details/82460464

方法

方法1: 进行评分扩展,增加个默认字段,如果有直接从redis读取,redis保存key是文档id,对应的为相关数量
方法2: 一个document分主document和点击子doucument,点击子doucument每天晚上更新一次,通过主document和点击子doucument关联查询,针对结果评分。这样因为点击子doucument比较小,build起索引来也非常快

es处理方案:

stackoverflow上的讨论:

场景举例(从stackoverflow摘取):

搜索时候,被点击的数量,在文档上的停留时间,被搜索到的数量,最终影响到搜索的评分

处理方法综述:

1、采用 parent-child documents relationship模式,主文档放静态数据,子文档动态数据

2、动态统计的数据放到动态数据库,比如:mongo,每天定时更新到子文档中

优缺点:

动态文档相对较小,更新起来也比较快,缺点还是不实时

如何实现Solr自定义评分查询

参考文档:http://qindongliang.iteye.com/blog/2297814

实现策略 

(1)在索引的时候把众多的业务评分计算提前计算好,存储成一个字段,然后查询的时候根据这个字段排名。 
评价:比较简单暴力,适合加权固定,不经常改变评分因素的业务使用,查询性能最高  ,更新,改变,调试评分比较麻烦 

(2)在索引的时候把众多的业务评分因子都索引成一个字段,在查询的时候动态获取各个字段评分计算后,加入总的评分从而影响最终的排名。 
评价:对动态更改评分支持比较好,查询性能稍差 

(3)对于业务的评分因素,动静分离,静态评分因子长期不变的,就全部计算完存储成一个字段,动态的也存储若干字段,最终的评分由静态业务评分+动态业务评分+相似度评分综合得出,从而影响最终的排名。 
评价:合理规划评分因素,动静分离,算是业务与技术的一个折中 
 

推荐lucence相关研究文章:

http://www.iteye.com/blogs/subjects/mylucene

猜你喜欢

转载自blog.csdn.net/everlasting_188/article/details/82460464