В этой статье вы узнаете, как сделать пагинацию в Elasticsearch.
В предыдущей статье я представил параметр size, который я также буду использовать для постраничного просмотра результатов поиска. В то время как параметр size определяет, сколько документов должно быть возвращено в результатах, параметр from определяет, с какого индекса документов начинать поиск. Важно отметить, что этот индекс начинается с нуля, точно так же, как при работе с массивами в языке программирования. Поэтому, чтобы начать с первого индекса, нужно указать ноль, для второго документа - единицу и т.д. По умолчанию параметр from имеет нулевое значение.
Чтобы продемонстрировать, как постранично просматривать результаты поиска, я просто буду искать макароны, как обычно.
1 | GET /ecommerce/product/_search?q=name:pasta&size=5 |
Я указал размер страницы как 5. Я не добавил параметр from, потому что по умолчанию нулевое значение - это то, что мне нужно для первой страницы результатов, но я с таким же успехом мог бы указать нулевое значение явно, если бы захотел. Это первая страница результатов поиска, поэтому перейдем к самому интересному и посмотрим, как можно получить вторую страницу.
1 | GET /ecommerce/product/_search?q=name:pasta&size=5&from=5 |
Помните, что первый запрос вернул документы с индексами от 0 до 4 из-за параметра size, равного 5, поэтому для получения следующей страницы я установил параметр from равным 5. Чтобы получить третью страницу, я могу просто установить параметр 10.
1 | GET /ecommerce/product/_search?q=name:pasta&size=5&from=10 |
Вот так все просто! Концепция та же самая при использовании DSL запроса, который я вам сейчас покажу. Итак, я собираюсь использовать тот же пример и написать эквивалентный запрос с помощью query DSL.
1 2 3 4 5 6 7 8 9 | GET /ecommerce/product/_search { "query": { "match": { "name": "pasta" } }, "size": 5 } |
Вы видели этот запрос в предыдущей статье, поэтому здесь нет ничего нового. Этот запрос извлекает первую страницу результатов, поскольку индекс первого документа по умолчанию равен нулю. Как вы уже догадались, я могу добавить свойство from, равное 5, чтобы получить вторую страницу.
1 2 3 4 5 6 7 8 9 10 | GET /ecommerce/product/_search { "query": { "match": { "name": "pasta" } }, "size": 5, "from": 5 } |
А чтобы получить третью страницу результатов, я просто увеличиваю свойство from до 10.
1 2 3 4 5 6 7 8 9 10 | GET /ecommerce/product/_search { "query": { "match": { "name": "pasta" } }, "size": 5, "from": 10 } |
Если вы знакомы с реляционными базами данных, такими как MySQL, то можете считать, что эти параметры аналогичны ключевым словам LIMIT и OFFSET.
Вот и все. Теперь вы должны знать, как постранично просматривать результаты поиска, что можно использовать, например, для создания страниц результатов поиска для веб-приложения.