gpt4 book ai didi

sorting - 如何在Elasticsearch中按字段排序?

转载 作者:行者123 更新时间:2023-12-02 23:25:01 25 4
gpt4 key购买 nike

我有这样的mysql查询:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.ID IN (2991,2993,2989,2983,2987)
AND wp_posts.post_type = 'product'
AND ((wp_posts.post_status = 'publish'))
ORDER BY FIELD( wp_posts.ID, 2991,2993,2989,2983,2987 )
LIMIT 0, 10

我要注意以下特定行: ORDER BY FIELD( wp_posts.ID, 2991,2993,2989,2983,2987 )
在elasticsearch中,我们只能按 ascdesc进行排序: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_sort_order

因此,任何人都可以指出我如何在elasticsearch查询中实现 order by field (id, x,y,z)

最佳答案

它不像SQL那样简单,但是您可以为值使用function_score和多个match
像这样的东西:

{
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"terms": {
" ID": [
2991,
2993,
2989,
2983,
2987
]
}
},
{
"term": {
"post_type": {
"value": "product"
}
}
},
{
"term": {
"post_status": {
"value": "publish"
}
}
}
]
}
},
"boost": "5",
"functions": [
{
"filter": {
"match": {
"ID": 2991
}
},
"weight": 100
},
{
"filter": {
"match": {
"test": 2993
}
},
"weight": 99
},
{
"filter": {
"match": {
"test": 2989
}
},
"weight": 98
},
{
"filter": {
"match": {
"test": 2983
}
},
"weight": 97
},
{
"filter": {
"match": {
"test": 2987
}
},
"weight": 96
}
],
"score_mode": "max",
"boost_mode": "multiply"
}
}
}

关于sorting - 如何在Elasticsearch中按字段排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44226928/

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