gpt4 book ai didi

sorting - Elasticsearch按不在过滤器中的字段值排序

转载 作者:行者123 更新时间:2023-12-03 01:28:15 26 4
gpt4 key购买 nike

有人可以帮助我进行查询,如果该字段不是请求中查询的一部分,它将根据某个字段值对结果项进行排序。我有一个查询:

{
"_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"
}
}
]
}
}
}

结果根据字段状态按字母升序排序。状态包含一些值,例如[active,canceled,old ....],我需要对查询中的每个可能值进行增强等操作。例如。主动升压5,取消升压4,旧升压3 ...........可以这样做吗?谢谢。

最佳答案

您将需要一个custom sort using script来实现所需的功能。

我刚刚对查询使用了通用match_all查询,您可能可以继续在其中添加查询逻辑,但是您要寻找的解决方案在以下查询的sort部分中。

确保statuskeyword类型

基于值的自定义排序

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部分中添加值。例如如果您的值是 new,并且您希望它的值等于 2,那么您的得分将在下面:
{  
"scores":{
"active":5,
"old":4,
"cancelled":3,
"new":6
}
}

因此,基本上,首先将按照 _score对文档进行排序,然后在经过排序的文档上执行 script sort

请注意,脚本排序本质上是 desc,因为我知道您希望在顶部显示 active文档,然后再显示其他值。随便玩吧。

希望这可以帮助!

关于sorting - Elasticsearch按不在过滤器中的字段值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57459072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com