Sorting Elasticsearch按不在筛选器中的字段值排序
有人能帮我做一个查询,如果这个字段不是请求中查询的一部分,它将根据一些字段值对结果项进行排序。我有一个问题:Sorting Elasticsearch按不在筛选器中的字段值排序,sorting,elasticsearch,boost,Sorting,elasticsearch,Boost,有人能帮我做一个查询,如果这个字段不是请求中查询的一部分,它将根据一些字段值对结果项进行排序。我有一个问题: { "_source": [ "ico", "name", "city", "status" ], "sort": { "_score": "desc", "status": "asc" }, "size": 20, "query": {
{
"_source": [
"ico",
"name",
"city",
"status"
],
"sort": {
"_score": "desc",
"status": "asc"
},
"size": 20,
"query": {
"bool": {
"should": [
{
"match": {
"normalized": {
"query": "idona",
"analyzer": "standard",
"boost": 3
}
}
},
{
"term": {
"normalized2": {
"value": "idona",
"boost": 2
}
}
},
{
"match": {
"normalized": "idona"
}
}
]
}
}
}
结果根据字段状态按字母升序排序。Status包含的值很少,比如[active,Cancelled,old…],我需要一些东西,比如为查询中的每个可能的值提升。例如,主动增压5、取消增压4、旧增压3。。。。。。。。。。。有可能吗?谢谢。你需要一个团队来实现你想要的
我刚刚使用了genericmatch\u all
query进行查询,您可能可以继续在那里添加查询逻辑,但您正在寻找的解决方案位于下面查询的sort
部分
确保status
是一个类型
基于值的自定义排序
因此,基本上,文档将首先按照\u score
进行排序,然后在排序后的文档上执行
请注意,脚本排序本质上是desc
,因为我知道您希望在顶部显示active
文档,然后是其他值。随便玩玩吧
希望这有帮助 嘿,Camo,上面的答案有用吗?这就是你要找的还是你还有其他疑问!!??看起来不错,但我现在很迷茫。现在我有另一个问题。
POST <your_index_name>/_search
{
"query":{
"match_all":{
}
},
"sort":[
{ "_score": "desc" },
{
"_script":{
"type":"number",
"script":{
"lang":"painless",
"inline":"if(params.scores.containsKey(doc['status'].value)) { return params.scores[doc['status'].value];} return 100000;",
"params":{
"scores":{
"active":5,
"old":4,
"cancelled":3
}
}
},
"order":"desc"
}
}
]
}
{
"scores":{
"active":5,
"old":4,
"cancelled":3,
"new":6
}
}