👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
📝联系方式:he18339193956,加我进群,大家一起学习,一起读书,一起对抗互联网寒冬👀
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。
今天有一个需求是按照先是未处理,已处理,处理中来进行排序,先显示未处理的事情,然后已处理和处理中的放在后面,并且是当检索框选择了截止时间之后,按照截止进行排序,并且之前的未处理和处理中的顺序不发生改变。
思路:
这个其实先考虑未处理处理中和截止时间之间的排序关系。这个可以通过function_score 中的weight加强函数来进行排序,可以给未处理赋予最大的权重,截止时间次大,之后的未处理和处理中权重最小
截止时间那个排序可以通过function_score 中的衰减函数gass函数来进行排序,距离截止时间越远,得分越低。
这样的话就可以实现先按照未处理大的排序逻辑,之后按照截止时间进行排序
这里衰减函数默认的话是按照当前时间为原点,然后进行衰减的
linear、exp、gauss三种衰减函数的差别只在于衰减曲线的形状,在DSL的语法上的用法完全一样
、
衰减函数们 (linear、exp、gauss) 支持的参数
以上面的图为例
这里衰减函数默认的话是按照当前时间为原点,然后进行衰减的,所以我们设置默认按照当前事件的前100天为原点,来开始得分衰减,并且是按照秒来进行衰减,这样的话就可以实现按照截止时间来进行排序
参考http://www.javashuo.com/article/p-syxxtytd-ka.html
https://www.cnblogs.com/yinjihuan/p/13570778.html这两篇打分博客
boost_mode : 决定 old_score 和 加强score 如何合併
score_mode : 决定functions裡面的加强score们怎麽合併,会先合併加强score们成一个总加强score,再使用总加强score去和old_score做合併,换言之就是会先执行score_mode,再执行boost_mode
GaussDecayFunctionBuilder dateGaussDecayFunctionBuilder=ScoreFunctionBuilders.gaussDecayFunction("截止时间",time , "100d", "0s").setWeight(10);
FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.prefixQuery("未处理,), ScoreFunctionBuilders.weightFactorFunction(100)),
new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.prefixQuery(“处理中”), ScoreFunctionBuilders.weightFactorFunction(1)),
new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.prefixQuery(“已处理”), ScoreFunctionBuilders.weightFactorFunction(1)),
new FunctionScoreQueryBuilder.FilterFunctionBuilder(dateGaussDecayFunctionBuilder)
};
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(filterFunctionBuilders).scoreMode(FiltersFunctionScoreQuery.ScoreMode.SUM);
ScoreMode采用累加的方式
官方文档https://www.elastic.co/guide/cn/elasticsearch/guide/current/decay-functions.html
🔥一个人可以掌握知识,但只有与他人交流才能形成智慧。
🔥One person can acquire knowledge, but wisdom is formed only in the exchange with others.
📝 欢迎大家关注博主公众号 Rockey小何同学 添加博主微信:he18339193956进群,一起学习,一起成长,一起提高认知。
🏆 我坚信人与人之间的差距是表面上是财富的差距,本质上是大脑中认知的差距,
我们下期再见。