API Point-in-Time (PIT) - это мощная функция в OpenSearch, которая позволяет пользователям сохранять последовательное представление данных при выполнении поисковых операций. Это особенно полезно при работе с большими наборами данных или при выполнении нескольких поисковых запросов, которые должны быть согласованы друг с другом.
В этой статье мы расскажем о расширенных возможностях использования PIT API и поделимся лучшими практиками оптимизации его работы. Если вы хотите узнать о пагинации в OpenSearch - какую технику использовать в зависимости от вашего случая использования, ознакомьтесь с этим руководством.
Понимание Point-in-Time API
API PIT работает путем создания облегченной ссылки на текущее состояние индекса на момент запроса. Эта ссылка, называемая идентификатором текущего состояния, может быть использована в последующих поисковых запросах для обеспечения соответствия результатов начальному состоянию. Это особенно полезно при постраничном просмотре больших наборов результатов, так как предотвращает возврат методом "поиск после" дубликатов или отсутствующих документов из-за изменений в индексе в процессе поиска.
Создание Point-in-Time
Чтобы создать точку-время, вам нужно отправить POST-запрос на конечную точку _pit
. Запрос должен содержать параметр keep_alive
, который задает продолжительность, в течение которой должен поддерживаться point-in-time. Стоит отметить, что длительность keep_alive
не должна быть достаточной, чтобы обработать все данные, а только достаточной до следующего запроса. Вот пример:
1 | POST /my-index/_pit?keep_alive=1m |
Этот запрос создает точку-время для индекса my-index
и сохраняет ее в течение 5 минут, что означает, что у вас есть 5 минут до второго запроса, чтобы получить следующую порцию данных. В ответе будет указан pit_id
, который вы сможете использовать в последующих поисковых запросах:
1 2 3 | { "id": "some_pit_id" } |
Использование Point-in-Time в поисковых запросах
Чтобы использовать идентификатор point-in-time в поисковом запросе, вам нужно включить его в тело запроса, а также указать длительность keep_alive
, чтобы продлить время жизни point-in-time. Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 | POST /_search { "pit": { "id": "some_pit_id", "keep_alive": "1m" }, "query": { "match": { "field": "value" } } } |
Этот запрос выполняет поиск по индексу с использованием идентификатора момента времени, гарантируя, что результаты будут соответствовать начальному состоянию.
Закрытие Point-in-Time
Когда точка-время больше не нужна, важно закрыть ее, чтобы освободить ресурсы. Чтобы закрыть point-in-time, отправьте запрос DELETE на конечную точку _pit
с указанием id
point-in-time в теле запроса:
1 2 3 4 | DELETE /_pit { "id": "some_pit_id" } |
Лучшие практики использования PIT API
- Установите подходящую продолжительность
keep_alive
: Параметрkeep_alive
определяет, как долго точка-время будет поддерживаться до запроса следующей партии. Установка более длительной продолжительности может потребовать больше ресурсов, в то время как установка более короткой продолжительности может привести к истечению срока действия point-in-time до завершения следующего поискового запроса. Выберите продолжительность, которая позволяет сбалансировать использование ресурсов и ожидаемое время до следующей поисковой операции. - Закрывайте точку-время, когда закончите: Всегда закрывайте point-in-time, когда он больше не нужен, чтобы освободить ресурсы. Если не закрыть point-in-time, это может привести к увеличению использования ресурсов и потенциальным проблемам с производительностью.
- Используйте PIT API для больших наборов результатов: API PIT особенно полезен при постраничном просмотре больших наборов результатов, поскольку он обеспечивает согласованность результатов при нескольких поисковых запросах. Если вы имеете дело с небольшими наборами результатов или одиночными поисковыми запросами, возможно, вам не нужно использовать PIT API.
- Комбинируйте с методом "поиск после": При постраничном просмотре больших наборов результатов комбинируйте PIT API с методом "поиск после" для эффективного получения последующих страниц результатов. Такой подход позволяет избежать проблем с производительностью, связанных с глубокой пагинацией с использованием параметров
from
иsize
. - Контролируйте использование ресурсов: Следите за использованием ресурсов вашего кластера OpenSearch, особенно при длительном использовании PIT API или при работе с большими наборами данных. Если вы заметили повышенное потребление ресурсов или проблемы с производительностью, рассмотрите возможность изменения длительности
keep_alive
или закрытия неиспользуемых ссылок point-in-time.
Заключение
OpenSearch Point-in-Time API - это мощный инструмент для поддержания последовательного представления данных во время поисковых операций. Следуя лучшим практикам, описанным в этой статье, вы сможете оптимизировать производительность ваших поисковых запросов и обеспечить точность и согласованность результатов. Не забывайте ответственно подходить к созданию, использованию и закрытию ссылок point-in-time, чтобы минимизировать использование ресурсов и поддерживать здоровье вашего кластера OpenSearch.