您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Lucene 8.x中怎么利用FunctionScoreQuery 自定義文檔評分,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
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)"; HashMap<String, Method> scoreMethods = 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 用來存放所有自定義函數(shù)對應(yīng)的 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 實(shí)例。
你可以試試打印一下 query 看看,我這邊一個(gè)真實(shí)打印的結(jié)果如下:
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 自定義文檔評分了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。