我正在尝试为目标数字附近的范围构建ES查询。例如,如果我输入10000,则我希望1000个结果与#10000居中。问题是结果不完整,即可能有或没有值9999的东西,所以我不能只在9500和10500之间进行搜索。我的方法是进行两个不同的查询,一个查询的大小为500,查找所有小于或等于10000的值并按降序排序,第二个大小为500的查询查找所有大于10000的值并按升序排序。不幸的是,它不能按我想要的方式工作,最终我根本得不到#10000。我的查询如下:
query1 = {
'size': 500,
'sort': [{'id': {'order': 'desc', 'unmapped_type': 'boolean'}}],
'query': {
'bool': {
'filter': [
{'match_phrase': {'group_id': int(request.args['group'])}},
{'range': {'id': {'lte': int(request.args['id'])}}}
]
}
}
}
query2 = {
'size': 500,
'sort': [{'id': {'order': 'asc', 'unmapped_type': 'boolean'}}],
'query': {
'bool': {
'filter': [
{'match_phrase': {'group_id': int(request.args['group'])}},
{'range': {'id': {'gt': int(request.args['id'])}}}
]
}
}
}
我该如何进行这项工作?