Elasticsearch 优先考虑特定的 _id 但不过滤?
Elasticsearch prioritize specific _ids but don't filter?
我正在尝试在 elasticsearch 中对我的查询进行排序,其中查询将优先显示具有特定 _id 的文档,但它不会根据 _id 过滤整个查询,它只是对它们进行优先排序。
这是我尝试过的示例:
{"query":{"constant_score":{"filter":{"terms":{"_id":[2,3,4]}},"boost":2}}}
因此上述内容将与其他查询一起包括在内,但是查询只是 returns 完全匹配而不是其余结果。
关于如何做到这一点的任何想法,以便它只优先考虑具有 ID 的文档而不过滤整个查询?
如果您需要 return 的确切顺序,请使用
"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
试试这个(而不是那个 match_all()
你可以使用查询来实际过滤结果):
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"terms": {
"_id": [
2,
3,
4
]
}
},
"weight": 2
}
]
}
}
}
我正在尝试在 elasticsearch 中对我的查询进行排序,其中查询将优先显示具有特定 _id 的文档,但它不会根据 _id 过滤整个查询,它只是对它们进行优先排序。
这是我尝试过的示例:
{"query":{"constant_score":{"filter":{"terms":{"_id":[2,3,4]}},"boost":2}}}
因此上述内容将与其他查询一起包括在内,但是查询只是 returns 完全匹配而不是其余结果。
关于如何做到这一点的任何想法,以便它只优先考虑具有 ID 的文档而不过滤整个查询?
如果您需要 return 的确切顺序,请使用
"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
试试这个(而不是那个 match_all()
你可以使用查询来实际过滤结果):
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"terms": {
"_id": [
2,
3,
4
]
}
},
"weight": 2
}
]
}
}
}