Очереди индексирования Google Cloud Search

SDK Connector и API Cloud Search поддерживают создание очередей индексирования Cloud Search . Используйте эти очереди для:

  • Для синхронизации индекса необходимо поддерживать состояние каждого документа (статус, хеши и т. д.).
  • Ведите список элементов, подлежащих индексации, который будет определяться в процессе обхода каталога.
  • Расставляйте приоритеты для элементов в зависимости от их статуса.
  • Поддерживайте актуальность информации о состоянии системы, такой как контрольные точки и токены для размена.

Очередь — это метка, присвоенная индексированному элементу (например, "default").

Статус и приоритет

Приоритет документа зависит от его кода ItemStatus . Возможные коды, в порядке приоритета (от наивысшего к наинизшему):

  • ERROR : Произошла асинхронная ошибка, требуется переиндексация элемента.
  • MODIFIED : Ранее этот элемент был проиндексирован, но в репозитории произошли изменения.
  • NEW_ITEM : Этот товар еще не проиндексирован.
  • ACCEPTED : Данный товар ранее был внесен в индекс и не претерпел изменений.

Для товаров с одинаковым статусом более высокий приоритет отдается тем, которые дольше всего находятся в очереди.

Добавить в индекс новый или измененный элемент

На рисунке 1 показаны шаги индексирования нового или измененного элемента с использованием очереди индексирования. Эти шаги соответствуют вызовам REST API; эквиваленты в SDK см. в разделе «Операции с очередью (Connector SDK)» .

Обзор индексирования в облачном поиске
Рисунок 1. Этапы индексирования для добавления или обновления элемента.
  1. Коннектор контента использует items.push для отправки метаданных и хешей в очередь.
    • Если коннектор содержит type push или contentHash , Cloud Search определяет его статус.
    • Неизвестные товары получают статус NEW_ITEM .
    • Существующие элементы с совпадающими хешами остаются ACCEPTED .
    • Существующие элементы с разными хешами становятся MODIFIED .
  2. Коннектор использует items.poll для определения того, какие элементы следует индексировать. Cloud Search возвращает элементы в порядке приоритета.
  3. Коннектор извлекает элементы из репозитория и формирует запросы к API индекса.
  4. Коннектор использует items.index для индексации элементов. После успешной обработки элемент переходит в состояние ACCEPTED .

Удалить элемент

Стратегия полного обхода использует две очереди для индексации элементов и обнаружения удалений. На рисунке 2 показан второй обход в рамках этой стратегии.

Обзор индексирования в облачном поиске
Рисунок 2. Удаление элементов
  1. При первом проходе коннектор помещает элементы в "очередь A" как NEW_ITEM . Каждому элементу присваивается метка "A".
  2. Соединитель опрашивает очередь A и индексирует элементы.
  3. При втором полном обходе соединитель помещает элементы в «очередь B».
    • Неизвестные товары получают метку "B" и статус NEW_ITEM .
    • Существующие элементы с совпадающими хешами меняют свою метку на "B" и остаются ACCEPTED ".
    • Существующие элементы с разными хешами меняют свою метку на "B" и становятся MODIFIED .
  4. Соединитель опрашивает очередь B и индексирует элементы.
  5. Наконец, коннектор вызывает deleteQueueItems для очереди A. Это удаляет все ранее проиндексированные элементы, которые все еще имеют метку "A".
  6. При последующих проходах роли двух очередей меняются местами.

Операции в очереди (SDK коннектора)

Используйте конструктор pushItems для добавления элементов. SDK автоматически извлекает элементы из очереди в порядке приоритета, используя метод getDoc класса Repository .

Операции с очередью (REST API)

  • Для отправки изменений используйте Items.push .
  • Для проведения опроса используйте Items.poll .

Также можно использовать Items.index для добавления элементов во время индексирования. Эти элементы автоматически получают статус ACCEPTED .

Items.push

Этот метод добавляет идентификаторы в очередь. type определяет результат. Добавление нового идентификатора создает запись со статусом NEW_ITEM . Необязательная полезная нагрузка возвращается во время опроса.

Опрашиваемые элементы зарезервированы и не могут быть возвращены другими вызовами опроса. Использование Items.push с type установленным на NOT_MODIFIED , REPOSITORY_ERROR или REQUEUE снимает резервирование с этих элементов.

Items.push с хэшами

Укажите метаданные или хеши контента в запросе на отправку. Cloud Search сравнит их с сохраненными значениями. Если они не совпадают, запись становится MODIFIED . Несоответствующие идентификаторы, которых не существует, становятся NEW_ITEM .

Items.poll

Этот метод извлекает записи с высоким приоритетом. Каждая возвращенная запись резервируется до истечения времени ожидания, переиндексации или снятия резервирования с помощью Items.push .