十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这期内容当中小编将会给大家带来有关Lucene 8.x中怎么利用FunctionScoreQuery 自定义文档评分,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创新互联建站"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联建站具备承接各种类型的成都网站建设、成都网站制作项目的能力。经过10年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。
import org.apache.lucene.expressions.Expression; import org.apache.lucene.expressions.SimpleBindings; import org.apache.lucene.expressions.js.JavascriptCompiler; import org.apache.lucene.queries.function.FunctionScoreQuery; import org.apache.lucene.queryparser.classic.ParseException;
SimpleBindings bindings = new SimpleBindings(); bindings.add("$score", DoubleValuesSource.SCORES); bindings.add("$recomm", DoubleValuesSource.fromIntField("recomm")); bindings.add("$viewcount", DoubleValuesSource.fromIntField("viewcount")); bindings.add("$wordcount", DoubleValuesSource.fromIntField("wordcount"));
String sort_method= "mysort($score,$recomm,$viewcount,$wordcount)"; HashMapscoreMethods = new HashMap(); scoreMethods.put("mysort", getClass().getDeclaredMethod("mysort", double.class, double.class, double.class, double.class)); Expression expr = JavascriptCompiler.compile(sort_method, scoreMethods, getClassLoader());
注意这里的 scoreMethods 用来存放所有自定义函数对应的 Java 方法,如下所示:
public double mysort(double score, double recomm, double viewcount, double wordcount) { if(score >= 40) { if(recomm > 0) score += 100; if(viewcount >= 1000) score += 100; if(wordcount >= 200) score += 20; } return score; }
FunctionScoreQuery query = new FunctionScoreQuery(oldQuery, expr.getDoubleValuesSource(bindings));
这里的 oldQuery 就是你原先用来做全文搜索的 Query 实例。
你可以试试打印一下 query 看看,我这边一个真实打印的结果如下:
FunctionScoreQuery(+type:[2 TO 2] +fork:[0 TO 0] +(((+name:j2cache)^20.0 (+description:j2cache)^10.0 (+detail:j2cache)^1.0 (+tags:j2cache)^10.0 (+catalogs:j2cache)^10.0 (+owner.name:j2cache)^2.0)~1), scored by expr(repo_sort($score,$recomm,$stars,$gindex)))
上述就是小编为大家分享的Lucene 8.x中怎么利用FunctionScoreQuery 自定义文档评分了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。