SDK Connector и API Cloud Search поддерживают создание очередей индексирования Cloud Search . Используйте эти очереди для:
- Для синхронизации индекса необходимо поддерживать состояние каждого документа (статус, хеши и т. д.).
- Ведите список элементов, подлежащих индексации, который будет определяться в процессе обхода каталога.
- Расставляйте приоритеты для элементов в зависимости от их статуса.
- Поддерживайте актуальность информации о состоянии системы, такой как контрольные точки и токены для размена.
Очередь — это метка, присвоенная индексированному элементу (например, "default").
Статус и приоритет
Приоритет документа зависит от его кода ItemStatus . Возможные коды, в порядке приоритета (от наивысшего к наинизшему):
-
ERROR: Произошла асинхронная ошибка, требуется переиндексация элемента. -
MODIFIED: Ранее этот элемент был проиндексирован, но в репозитории произошли изменения. -
NEW_ITEM: Этот товар еще не проиндексирован. -
ACCEPTED: Данный товар ранее был внесен в индекс и не претерпел изменений.
Для товаров с одинаковым статусом более высокий приоритет отдается тем, которые дольше всего находятся в очереди.
Добавить в индекс новый или измененный элемент
На рисунке 1 показаны шаги индексирования нового или измененного элемента с использованием очереди индексирования. Эти шаги соответствуют вызовам REST API; эквиваленты в SDK см. в разделе «Операции с очередью (Connector SDK)» .

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

- При первом проходе коннектор помещает элементы в "очередь A" как
NEW_ITEM. Каждому элементу присваивается метка "A". - Соединитель опрашивает очередь A и индексирует элементы.
- При втором полном обходе соединитель помещает элементы в «очередь B».
- Неизвестные товары получают метку "B" и статус
NEW_ITEM. - Существующие элементы с совпадающими хешами меняют свою метку на "B" и остаются
ACCEPTED". - Существующие элементы с разными хешами меняют свою метку на "B" и становятся
MODIFIED.
- Неизвестные товары получают метку "B" и статус
- Соединитель опрашивает очередь B и индексирует элементы.
- Наконец, коннектор вызывает
deleteQueueItemsдля очереди A. Это удаляет все ранее проиндексированные элементы, которые все еще имеют метку "A". - При последующих проходах роли двух очередей меняются местами.
Операции в очереди (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 .