Elasticsearch, как запросить поле идентификатора выше x

Я пытаюсь применить разбивку на страницы к результатам, запрашивая несколько раз, чтобы преодолеть 10-тысячный барьер Elasticsearch. Поскольку результаты Elasticsearch могут различаться во время нескольких запросов, я хочу использовать сгенерированный идентификатор для получения следующих результатов.

Так, например, я запускаю запрос, который возвращает 1000 результатов. Затем я хочу получить значение идентификатора 1000-го результата и выполнить запрос типа: match : ID {{1000thID}}

Таким образом, я хочу получить результат от 1001 до 2000 года. после этого 2001 до 3000, и так далее.

В настоящее время я использую Elasticsearch DSL для python для запроса доменного имени, например:

search.query('match', domainname=domainname)

Как мне перестроить этот код, чтобы он соответствовал вышеуказанным требованиям. («совпадение», _ID > ID_Variable)


person JasperFennet    schedule 19.10.2016    source источник


Ответы (1)


Лучший способ добиться того, чего вы хотите, — это использовать API-интерфейс scroll/can. Однако, если вы все еще хотите продолжить таким образом, вы можете сделать это следующим образом:

last_id = ...
search.filter('range', id={'gt': last_id + 1, 'lt': last_id + 1000})
person Val    schedule 19.10.2016
comment
Черт, забыл сказать, что сгенерированный идентификатор является буквенно-цифровым, например: AVfcOQSECcVao75vrqGf, поэтому, я думаю, вышеприведенное решение не сработает! - person JasperFennet; 19.10.2016
comment
И довольно важный ;-) Вы все еще можете использовать свои собственные идентификаторы, если хотите. - person Val; 19.10.2016
comment
где мне настроить автоинкремент, Logstash или Elasticsearch? и любой источник о том, как настроить это? Я искал ваш собственный идентификатор, но все, что я могу найти, добавляется вручную. - person JasperFennet; 19.10.2016
comment
Да, вам нужно явно указать свои собственные идентификаторы при индексировании документа. ES не сделает этого за вас. - person Val; 19.10.2016