在下面的文档中搜索“foo bar”会得到name*
的累积结果,但我希望获得最匹配字段的分数(即name1
分数)。
{
"name1": "foo bar",
"name2": "foo",
"name3": "bar"
}
查询例如:
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [{
"match": {
"name1": {
"query": "foo bar"
}
}
}, {
"match": {
"name2": {
"query": "foo bar"
}
}
}, {
"match": {
"name3": {
"query": "foo bar"
}
}
}]
}
}
}
}
}
使用Elasticsearch 2.4
答案 0 :(得分:1)
boolean query结合了所有子查询的分数。来自docs:
bool查询采用更多匹配更好的方法,因此得分 从每个匹配的must或should子句将被加在一起 为每个文档提供最终的_score。
对于您的情况,您希望使用其他加入查询:The dis_max query
生成由其生成的文档的并集的查询 子查询,并为每个文档评分最高分数 该文档由任何子查询生成,加上打破平局 任何其他匹配子查询的增量。
示例:
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"name1": {
"query": "foo bar"
}
}
},
{
"match": {
"name2": {
"query": "foo bar"
}
}
},
{
"match": {
"name3": {
"query": "foo bar"
}
}
}
]
}
}
}
*请注意,我在ES6上写了这个,它不再有filtered
查询,但我希望你能得到主旨:)
希望这有帮助!