SearchQueryで検索する際に、各ヒットのinvidual_scoreを確認して使用しようとしています。これは、とりわけ、検索結果の範囲がどのようなものかを知ることですが、searchQuery.withMinScore(float)を使用してMinScoreを設定する以外は、私は検索のスコアを処理するための方法を見つけることができません。春の各ヒットのスコアSearchQuery ElasticSearch
@Override
public Page<Website> listsearch(SearchBody searchBody, int size, int page) {
BoolQueryBuilder qb = QueryBuilders.boolQuery();
for(SearchUnit unit:searchBody.getSearchBody()){
if(unit.isPriority()) {
qb.must(matchQuery("_all", unit.getWord()).operator(MatchQueryBuilder.Operator.AND)
.fuzziness(Fuzziness.AUTO));
}else {
qb.should(termQuery("_all", unit.getWord())
.boost(unit.getWeight()));
}
}
for(SearchUnit ExUnit:searchBody.getExcludeBody()){
qb.mustNot(matchPhraseQuery("_all",ExUnit.getWord()));
}
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices("websites_v1")
.withTypes("website")
.withQuery(qb)
.withMinScore(0.05F)//Magical minscore
.withPageable(new PageRequest(page, size))
.build();
Page<Website> search = searchRepository.search(searchQuery);
return search;
}
使用された検索機能は、org.springframework.data.elasticsearch.repositoryからです。
私の質問は、とにかくページの各返されたオブジェクトのスコアにアクセスできますか?または、クエリメソッドを別のものに切り替える必要がありますか?
あなたは '_score'フィールドに各文書のスコアを見るべきです。あなたのサンプルの結果を得ることは良いことです。 –
@MohammadMazraehしかし、どうすればアクセスできますか?ページに_scoreというフィールドが含まれていないようですか? –