Удаление и перестроение индекса в службе "Поиск ИИ Azure"

В этой статье объясняется, как удалить и перестроить индекс поиска ИИ Azure. В нем объясняются обстоятельства, при которых требуются перестроения, и приведены рекомендации по устранению последствий перестроения в текущих запросах. Если вам приходится часто перестраивать, рекомендуется использовать псевдонимы индексов, чтобы упростить переключение индексов , на которые указывает приложение.

Во время активной разработки обычно происходит удаление и перестроение индексов при итерации по проектированию индексов. Большинство разработчиков работают с небольшим репрезентативным образцом данных, чтобы переиндексирование было быстрее.

Изменения, требующие перестроения

В следующей таблице перечислены изменения, требующие удаления и перестроения индекса.

Действие Description
Удаление поля Чтобы физически удалить все следы поля, необходимо перестроить индекс. Если немедленное перестроение не является практическим, вы можете изменить код приложения для перенаправления доступа из устаревшего поля или использовать searchFields и выбрать параметры запроса, чтобы выбрать, какие поля выполняются и возвращаются. Физически определение и содержимое поля сохраняются в индексе до следующей перестройки с использованием схемы, в которой это поле отсутствует.
Изменение определения поля Для изменения имени поля, типа данных или определенных атрибутов индекса (доступных для поиска, фильтруемых, сортируемых, аспектируемых) требуется полная перестроение.
Присвоение полю анализатора Анализаторы определяются в индексе, назначены полям, а затем вызываются во время индексирования, чтобы сообщить, как создаются маркеры. Вы можете добавить новое определение анализатора в индекс в любое время, но присвоить анализатор можно только при создании поля. Это касается обоих свойств: analyzer и indexAnalyzer. Свойство searchAnalyzer является исключением (его можно присвоить уже существующему полю).
Обновление или удаление определения анализатора в индексе Вы не можете удалить или изменить существующую конфигурацию анализатора (анализатор, токенизатор, фильтр маркеров или фильтр символов) в индексе, если вы не перестроите весь индекс.
Добавление поля в средство подбора Если поле уже существует и вы хотите добавить его в конструкцию предложения , перестройте индекс.
Смена уровня Обновления на месте не поддерживаются. Если требуется дополнительная емкость, создайте новую службу и перестроите индексы с нуля. Чтобы автоматизировать этот процесс, можно использовать пример кода для восстановления индексов в этом примере репозитория .NET для поиска ИИ Azure. Это приложение создаст резервную копию вашего индекса в виде серии файлов JSON, а затем воссоздаст индекс в указанной вами службе поиска.

Изменения без необходимости перестроения

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

  • Добавление нового поля
  • Задание атрибута Доступный для получения для существующего поля
  • Обновление searchAnalyzer в поле с существующим индексомAnalyzer
  • Добавьте новое определение анализатора в индекс (который можно применить к новым полям)
  • Добавление, обновление или удаление профилей повышения
  • Добавление, обновление или удаление параметров CORS
  • Добавление, обновление или удаление synonymMaps
  • Добавление, обновление или удаление семантических конфигураций

Когда вы добавляете новое поле, во всех существующих в индексе документах новому полю присваивается значение null. В будущем обновлении данных значения из внешних исходных данных заменяют значения NULL, добавленные поиском ИИ Azure. Дополнительные сведения об обновлении содержимого индекса см. в статье Добавление, обновление и удаление документов.

Как перестроить индекс

Во время разработки схема индекса часто изменяется. Это можно предусмотреть, создав индексы, которые можно быстро удалять, воссоздавать и перезагружать с помощью небольшого репрезентативного набора данных.

Для приложений, которые уже находятся в рабочей среде, рекомендуется создать новый индекс, который выполняется параллельно существующему, чтобы избежать простоя запроса. Код приложения обеспечивает перенаправление на новый индекс.

  1. Проверьте место. служба подвержены максимальному количеству индексов, изменяющихся по уровню служб. Убедитесь, что у вас есть место для второго индекса.

  2. Определите, требуется ли перестроение. Если вы просто добавляете поля или изменяете часть индекса, не связанного с полями, вы можете просто обновить определение без удаления, повторного восстановления и полной перезагрузки.

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

  4. Удалите существующий индекс, если вы не выполняете новые и старые индексы параллельно.

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

  5. Создайте измененный индекс, при этом тело запроса будет включать измененные или модифицированные определения полей.

  6. Загрузите индекс с документами из внешнего источника.

При создании индекса физическое хранилище выделяется для каждого поля в схеме индекса, и для каждого поля с поддержкой поиска создается инвертированный индекс. Поля, которые недоступны для поиска, могут использоваться в фильтрах или выражениях, но не имеют инвертированных индексов и не являются полнотекстовых или нечеткими для поиска. При перестроении индекса эти инвертированные индексы удаляются и создаются снова на основе предоставленной схемы индекса.

Когда вы загружаете индекс, инвертированный индекс каждого поля заполняется всеми уникальными маркированными словами из каждого документа с сопоставлением по идентификаторам соответствующих документов. Например, при индексировании набора данных гостиницы инвертированный индекс для поля "Город" может содержать условия для значений "Сиэтл", "Портленд" и т. д. Для документов, содержащих "Сиэтл" или "Портленд" в поле "Город", будет указан идентификатор рядом с условием поиска. При любой операции добавления, обновления или удаления условия поиска и список идентификаторов документов обновляются соответствующим образом.

Балансировка рабочих нагрузок

Индексирование не выполняется в фоновом режиме, но служба поиска будет балансировать все задания индексирования по текущим запросам. Во время индексирования вы можете наблюдать за запросами на портале, чтобы убедиться, что запросы выполняются своевременно.

Если индексирование рабочих нагрузок вводит неприемлемые уровни задержки запросов, проводите анализ производительности и просмотрите эти советы по устранению рисков .

Проверить наличие обновлений

Вы можете отправлять запросы к индексу сразу после загрузки первого документа. Если вы знаете идентификатор документа, API REST поиска по документу возвращает определенный документ. Для более подробного тестирования подождите полной загрузки индекса, а затем используйте запросы, чтобы проверить контекст, который вы ожидаете увидеть.

Для проверка обновленного содержимого можно использовать Обозреватель поиска или клиента REST.

Если вы добавили или переименовали поле, используйте $select, чтобы вернуть это поле: search=*&$select=document-id,my-new-field,some-old-field&$count=true

См. также