Запрос диапазона ElasticSearch: поиск значений вокруг числа - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь построить запрос 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'])}}}
            ]
        }
    }
}

Как я могу заставить это работать?

...