有没有办法以相同的方向对一些elasticsearch响应进行排序,我正在发布一个带有ids的数组?
示例:数组[23,45,67],结果应该以与 ID 相同的方式排序:首先是 ID 为 23 的所有行,然后是 ID 为 45 的所有行,最后是 ID 为 67 的所有行?
谢谢 尼克
您可以在排序中使用脚本,或者其他选项是使用 bool - 应该查询使用这些值增强文档的位置。
您可以使用无痛代码来解决这种情况:
假设一个基本查询:
{
"_source": ["*"],
"query": {...},
"sort": [...]
}
您可以在排序子句中添加此脚本:
[
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"params": {
"docIds":[23,45,67]
},
"source":
"def docId = doc['original_id'].value; "
"def rank = params.docIds.indexOf(docId); "
"if (rank == -1) "
" { rank = params.docIds.size(); } "
"else "
" { rank += 1; } "
"return rank;"
}
}
}
]
这将为数组中的三个元素分配分数 1、2、3,并为所有其余元素分配分数 4。
这是一个例子:
{
"from": 1,
"size": 20,
"_source": {
"includes": ["*"]
},
"query": {
"bool": {
match_all:{}
}
},
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"params": {
"docIds": [23,45,67]
},
"source": "def docId = doc['original_id'].value; def rank = params.docIds.indexOf(docId); if (rank == -1) { rank = params.docIds.size(); } else { rank += 1; } return rank;"
}
}
}
]
}