Elasticsearch查询词组合顺序
在elasticsearch中,我搜索一些标记,并将它们从最匹配到最不匹配进行排序。没关系 然而,我的问题是关于相等匹配情况的顺序 例如:Elasticsearch查询词组合顺序,search,
elasticsearch,combinations,combinatorics,Search,
elasticsearch,Combinations,Combinatorics,在elasticsearch中,我搜索一些标记,并将它们从最匹配到最不匹配进行排序。没关系 然而,我的问题是关于相等匹配情况的顺序 例如: 我存储了这些标签:“tag1”、“tag2”、“tag3”、“tag4”、“tag5” 我存储了这些标签:“tag6”,“tag1” 我存储了这些标签:“tag4”、“tag3”、“tag1” 我存储了这些标签:“tag2”、“tag1”、“tag5”、“tag7” 我的搜索查询: { "query" : { "bool" : {
{
"query" : {
"bool" : {
"must" : [
{
"terms" : {
"my_field" : ["tag4", "tag6"],
minimum_should_match : 1
}
},
{"term" : {"my_cityId" : 1}},
{"term" : {"my_townId" : 8}}
]
}
},
"sort" : [
{"_score" : "desc"},
{"my_topTime" : "asc"}
],
"from" : 0,
"size" : 5
}
它返回:
我的搜索顺序是tag4,然后是tag6。如何返回首先包含tag4行,然后返回tag6行?我从中找到了解决问题的方法 我使用“函数评分”进行过滤查询,并添加了“函数”和“评分模式”。除此之外,我在“函数”中为每个标记指定了“权重” 查询首先返回tag4s,然后返回包含行的tag6:
{
"query" : {
"function_score" : {
"filter" : {
"query" : {
"bool" : {
"must" : [
{
"terms" : {
"my_field" : ["tag4", "tag6"],
minimum_should_match : 1
}
} ,
{"term" : {"my_cityId" : 1}},
{"term" : {"my_townId" : 8}}
]
}
}
},
"functions" : [
{"filter" : {"term" : { "my_field" : "tag4" }}, "weight" : 2},
{"filter" : { "term" : { "my_field" : "tag6" }}, "weight" : 1}
],
"score_mode": "sum"
}
},
"sort" : [
{"_score" : "desc"},
{"my_topTime" : "asc"}
],
"from" : 0,
"size" : 5
}
您在查询中提供的术语顺序与匹配文档的分数无关。在您的案例中,这3个文档的顺序完全取决于“my_topTime”。顺便说一下,“my_topTime”字段值都是相等的。可以忽略它。