solr 学习,
最近在做solr查询 遇到这样的场景 按照title keywords publishtTime三个字段查询。如果单纯的titile和keywords还好办。直接设置pf title keywords 和qf title^0.6 keywords^0.4 就行了 这句话意思是titile诚意0.6计算的权重 加上keywords乘以0.4的值 然后相加获得中的权重,然后计算出评分 把获得的结果按照评分从高到底一次排列。
现在遇到一个问题 就是time这个评分要怎么计算
查了下网上资料 两个函数一个ms() 一个rord 还有一个recip
用法
bf
recip(ms(NOW,publishTime),3.16e-11,1,1)
sqrt(log(ms(publishTime)))
这里要说明的是bf接受的参数要么是时间 要么是数字 刚开始写的时候拿字符串去算 然后就呵呵了。
先解释下ms函数
api 这样描述 Returns milliseconds of difference between it's arguments.
ms有三种形式ms(),ms(a),ms(a,b);
ms()标示当前时间和1970年之间的毫秒值
ms(2000-01-01T00:00:00Z)表示 2000年和 1970年之间的毫秒值。
ms(a,b)表示两个时间之间的毫秒值
例如ms(NOW,publishTime) 就是现在时间 减去发布时间 的毫秒值。注意publishTime只能是过去的时间。。如果是将来 这个时间可能会不行
另外 在查询过程中遇到了下边现象
"publishTime": "2014-11-20T02:48:38Z", "ms(publishTime )": "2014-11-20T02:48:38Z"
ms(publishTime )的值不是数字
造成的原因很可能是publishTIme的字段类型不是date 二十tdate的原因