我正在嘗試從 elasticsearch 6.5.4 -> 8.1.1 遷移一些彈性功能,特別是 functionScoreQuery:
private SearchRequest buildRequest(String query) {
SearchRequest searchRequest = new SearchRequest(INDEX_ALIAS);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.functionScoreQuery(
getQuery(),
getFilterFunctions())
);
searchRequest.source(sourceBuilder);
return searchRequest;
}
private FilterFunctionBuilder[] getFilterFunctions() {
return new FilterFunctionBuilder[] {
boostFunction(termQuery("Term1", "Value1").boost(2.0f)),
boostFunction(termQuery("Term2", "Value2").boost(1.5f)),
};
}
private FunctionScoreQueryBuilder.FilterFunctionBuilder boostFunction(QueryBuilder query{
return new FilterFunctionBuilder(query, weightFactorFunction(1.0f));
}
我無法弄清楚如何使用新的 java api 來做到這一點。我正在嘗試這樣的事情:
private SearchRequest buildRequest(String query, int numberOfResults) {
return new SearchRequest.Builder()
.index(INDEX_ALIAS)
.query(buildQuery(query))
.build();
}
private Query buildQuery(String queryWithoutDots) {
return new Query.Builder()
.functionScore(f -> f
.query(getQueries())
.functions(getFilterFunctions())
)
.build();
}
private List<FunctionScore> getFilterFunctions() {
return List.of(
new FunctionScore.Builder()
.filter(new Query.Builder()
.term(t ->
t.queryName("Term1")
.value("Value1")
.boost(2.0f))
.build())
**.build(),**
new FunctionScore.Builder()
.filter(new Query.Builder()
.term(t ->
t.queryName("Term2")
.value("Value2")
.boost(1.5f))
.build())
**.build(),**
}
但是不可能將 FunctionScore 實體化為
“build()”在“co.elastic.clients.elasticsearch._types.query_dsl.FunctionScore”中具有受保護的訪問權限
這是一個錯誤嗎?還有其他我應該考慮的方法嗎?
uj5u.com熱心網友回復:
我想到了。例如,我需要使用修飾符:linear
new FunctionScore.Builder()
.linear(
l -> l.filter(
f -> f.term(
t -> t.queryName("Term1")
.value("Value1")
.boost(2.0f)
)
)
)
.build()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456494.html
標籤:爪哇 弹性搜索 elasticsearch-java-api
上一篇:使用后洗掉grok匹配欄位
下一篇:將陣列提升到一定功率的問題
