gpt4 book ai didi

sorting - Elasticsearch-将单个结果推到顶部

转载 作者:行者123 更新时间:2023-12-02 22:24:35 24 4
gpt4 key购买 nike

我正在与Elasticsearch合作。我有一系列文档,并且我尝试通过price属性对文档进行排序,但无论如何我都希望将特定文档作为第一个结果。

以下是我作为"sort"数组使用的内容,因为我尝试通过ID 1213来订购文档,然后按照价格降序对所有以下文档进行订购。

[
{
"id": {
"mode": "max",
"order": "desc",
"nested_filter": {
"term": {
"id": 1213
}
},
"missing": "_last"
}
},
{
"price": {
"order": "asc"
}
}
]

不过,这似乎并不起作用-文件1213并未首先出现。我在这里做错了什么?

例如,理想的返回结果是:
[{"id": 1213, "name": "Blue Sunglasses", "price": 12},
{"id": 1000, "name": "Green Sunglasses", "price": 2},
{"id": 1031, "name": "Purple Sunglasses", "price: 4},
{"id": 5923, "name": "Yellow Sunglasses, "price": 18}]

相反,我得到:
[{"id": 1000, "name": "Green Sunglasses", "price": 2},
{"id": 1031, "name": "Purple Sunglasses", "price: 4},
{"id": 1213, "name": "Blue Sunglasses", "price": 12},
{"id": 5923, "name": "Yellow Sunglasses, "price": 18}]

最佳答案

正如其他人已经问过的,nested_filter的原因是什么?

有许多可能的方法可以满足您的需求。这是一种符合您到目前为止提到的简单要求的可能方法:

{
"query" : {
"custom_filters_score" : {
"query" : {
"match_all" : {}
},
"filters" : [
{
"filter" : {
"term" : {
"id" : "1213"
}
},
"boost" : 2
}
]
}
},
"sort" : [
"_score",
"price"
]
}

这里的假设是您的查询像match_all查询一样简单,并且无论如何都不会影响得分。如果您确实对查询有更复杂的要求而不影响分数,则可以尝试使用constant_score查询进行换行。但是理想情况下,您将获得所需的文档集,其中所有文档的分数均相同,然后 custom_filters_score query将提高所需文档的分数。您可以对任意数量的文档添加进一步的过滤器,或者如果文档相等,请使用术语过滤器。最后按分数排序,然后按价格排序。

关于sorting - Elasticsearch-将单个结果推到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509335/

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