所以我有一个用例,我需要查询一些特定单词的句子,我的数据集看起来像这样
{
"_index": "12_index",
"_type": "skill_strings",
"_id": "AVKv-kM4axmY3fECZw9T",
"_source": {
"str": "SQL Server"
}
},
{
"_index": "12_index",
"_type": "skill_strings",
"_id": "AVKv-kNfaxmY3fECZw9U",
"_source": {
"str": "SQL .net java"
}
},
{
"_index": "12_index",
"_type": "skill_strings",
"_id": "AVKv-kPDaxmY3fECZw9X",
"_source": {
"str": "My SQL java php .net"
}
},
{
"_index": "12_index",
"_type": "skill_strings",
"_id": "AVKv-kOtaxmY3fECZw9W",
"_source": {
"str": "My SQL Server"
}
},
{
"_index": "12_index",
"_type": "skill_strings",
"_id": "AVKv-kOeaxmY3fECZw9V",
"_source": {
"str": "php asp.net Server"
}
}
我当前的查询看起来像这样
GET 12_index/skill_strings/_search
{
"explain": true,
"query" : {
"bool": {
"should": [
{"match_phrase" : { "str" : "SQL Server" }},
{"match_phrase" : { "str" : ".net" }}
]
}
}
}
因此,用例是找到具有任何一种技能的文档,我需要获得每个匹配的个人得分(我以后需要它们进行计算)。我不能使用匹配文档的总分,而是我需要每个匹配的单词/短语的分数。
使用explain:true,为我提供了得分的解释,但是我无法找到任何方法来取得这个分数并在java中使用
我的java代码看起来像这样
SearchResponse searchResponse = client.prepareSearch(index)
.setQuery(jsonQuery)
.setTypes(type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom(from).setSize(size).setExplain(true)
.execute()
.actionGet()
for(SearchHit hit : searchResponse.getHits()){
def id = hit.getId()
Map resMap = hit.getSource()
resMap.eplaination = hit.getExplanation().getDetails()
resData.add(resMap)
}
return resData
我可以看到当我执行hit.getExplanation()。getDetails()我得到类org.apache.lucene.search.Explanation的对象,但我不知道如何从中检索单个分数。欢迎任何帮助。感谢
答案 0 :(得分:0)
hit.getExplanation().getValue()
会给你分数。正如您所提到的,hit.getExplanation().getDetails()
本身就是org.apache.lucene.search.Explanation
数组。您可以通过调用score
方法获取所有子计算的getValue()
。