我正在尝试在elasticsearch中对查询进行排序,其中查询将优先处理具有特定_ids的文档,但是它不会根据_ids优先处理它们来过滤整个查询。
以下是我尝试尝试的一个例子:
{"query":{"constant_score":{"filter":{"terms":{"_id":[2,3,4]}},"boost":2}}}
因此,上述内容将与其他查询一起包含,但查询只返回完全匹配而不是其余结果。
关于如何做到这一点的任何想法,以便它只是使用id优先处理文档但不过滤整个查询?
答案 0 :(得分:4)
试试这个(而不是那个match_all()
,您可以使用查询来实际过滤结果):
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"terms": {
"_id": [
2,
3,
4
]
}
},
"weight": 2
}
]
}
}
}
答案 1 :(得分:0)
如果您需要按照确切的顺序返回
"sort": [
{
"_script": {
"script": "doc['id'] != null ? sortOrder.indexOf(doc['id'].value.toInteger()) : 0",
"type": "number",
"params": {
"sortOrder": [
2,3,4
]
},
"order": "desc"
}
},
"_score"
]
P.S。由于@Val提到wityh _id这不起作用,因此您需要将id字段存储为单独的。
如果您需要将文档移到顶部,请查看function_score