Поделиться через


Запуск или инициализация индексаторов, навыков или документов

В службе поиска искусственного интеллекта Azure существует несколько способов запуска индексатора:

В этой статье объясняется, как запускать индексаторы по запросу и без сброса. Он также описывает выполнение индексатора: длительность, параллелизм выполнения.

Как индексаторы подключаются к ресурсам Azure

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

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

Выполнение индексатора

Служба поиска выполняет одно задание индексатора на единицу поиска. Каждая служба поиска начинается с одной единицы поиска, но каждая новая секция или реплика увеличивает количество единиц поиска вашей службы. Вы можете проверить количество единиц поиска в разделе "Основные сведения" страницы портала Azure Обзор. Если требуется параллельная обработка, убедитесь, что поисковые единицы включают достаточное количество реплик. Индексаторы не работают в фоновом режиме, поэтому вы можете столкнуться с большими ограничениями запросов, чем обычно, если служба испытывает нагрузку.

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

Снимок экрана: раздел

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

Можно одновременно запускать несколько индексаторов при наличии достаточных ресурсов, но каждый индексатор является единственным экземпляром. Запуск нового экземпляра, когда индексатор уже выполняется, вызывает следующую ошибку: "Failed to run indexer "<indexer name>" error: "Another indexer invocation is currently in progress; concurrent invocations are not allowed."

Среда выполнения индексатора

Задание индексатора выполняется в управляемой среде выполнения. В настоящее время существует две среды:

  • Частная среда выполнения запущена в кластерах поиска, специфичных для вашей службы поиска.

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

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

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

Брандмауэры IP-адресов блокируют мультитенантную среду, поэтому если у вас есть брандмауэр, создайте правило , позволяющее подключения мультитенантного процессора.

Ограничения индексатора зависят от каждой среды:

Рабочая нагрузка Максимальная длительность Максимальное количество заданий Среда выполнения
Конфиденциальное выполнение 24 ч Одно задание индексатора на поисковую единицу1. Индексирование не выполняется в фоновом режиме. Вместо этого служба поиска балансирует все задания индексирования с текущими запросами и действиями управления объектами (например, создание или обновление индексов). При выполнении индексаторов следует ожидать некоторой задержки запросов, если объемы индексирования большие.
Мультитенантные 2 часа 2 Неопределенное 3 Так как кластер обработки содержимого является мультитенантным, процессоры содержимого добавляются для удовлетворения спроса. Если вы испытываете задержку при запуске по запросу или запланированном выполнении, вероятно, это связано с тем, что система добавляет процессоры или ожидает, пока они станут доступными.

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

2 Если для обработки всех данных требуется более двух часов, включите обнаружение изменений и запланируйте выполнение индексатора в течение 5 минут, чтобы возобновить индексирование быстро, если он останавливается из-за времени ожидания. Дополнительные стратегии см. в статье Индексирование большого набора данных .

3 "Неопределенное" означает, что ограничение не определяется числом заданий. Некоторые рабочие нагрузки, такие как обработка набора навыков, могут выполняться параллельно, что может привести к множеству заданий, даже если используется только один индексатор. Хотя среда не накладывает ограничения, ограничения индексатора для службы поиска по-прежнему применяются.

Запуск без сброса

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

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

  • служба хранилища Azure имеет встроенное обнаружение изменений с помощью свойства LastModified.

  • Другие источники данных, такие как SQL Azure или Azure Cosmos DB, должны быть настроены для обнаружения изменений, прежде чем индексатор сможет считывать новые и обновленные строки.

Если базовое содержимое не изменяется, операция выполнения не влияет. В этом случае журнал выполнения индексатора указывает на количество обработанных документов 0\0.

Чтобы выполнить повторную обработку, необходимо сбросить индексатор, как описано в следующем разделе.

Сброс индексаторов

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

Если необходимо перестроить весь индекс или его часть, используйте Сброс API, доступные на различных уровнях иерархии объектов.

После сброса выполните команду Run для повторной обработки новых и существующих документов. Потерянные документы поиска, не имеющие аналогов в источнике данных, не могут быть удалены с помощью сброса или запуска. Если вам нужно удалить документы, вместо этого см. статью «Документы — индекс»."

Примечание.

Таблицы не могут быть пустыми. Если вы используете TRUNCATE TABLE для очистки строк, сброс и повторное выполнение индексатора не удалит соответствующие документы поиска. Чтобы удалить потерянные документы поиска, необходимо индексировать их с помощью действия удаления.

Как сбросить и запустить индексаторы

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

Реальная работа выполняется после сброса с помощью команды "Выполнить".

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

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

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

Сброс также применяется к операциям создания и обновления. Он не активирует удаление или очистку потерянных документов в индексе поиска. Дополнительные сведения об удалении документов см. в разделе "Документы — индекс".

После сброса индексатора невозможно отменить действие.

  1. Войдите в портал Azure и откройте страницу службы поиска.

  2. На странице "Обзор" выберите вкладку "Индексаторы".

  3. Выберите индексатор.

  4. Выберите команду "Сброс", а затем нажмите кнопку "Да", чтобы подтвердить действие.

  5. Обновите страницу, чтобы отобразить состояние. Вы можете выбрать элемент, чтобы просмотреть его сведения.

  6. Выберите "Запустить" , чтобы начать обработку индексатора или дождитесь следующего запланированного выполнения.

    Снимок экрана страницы портала выполнения индексатора с выделенной командой

Как сбросить навыки (предварительная версия)

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

Сброс навыков в настоящее время доступен только для REST до 2020-06-30-preview или более поздней версии. Рекомендуется использовать последнюю предварительную версию API.

POST /skillsets/[skillset name]/resetskills?api-version=2024-05-01-preview
{
    "skillNames" : [
        "#1",
        "#5",
        "#6"
    ]
}

Вы можете указать отдельные навыки, как продемонстрировано в приведенном выше примере, но если для какого-либо из этих навыков потребуется результат отсутствующих в списке навыков (с #2 до #4), то будут выполняться отсутствующие в списке навыки, если только кэш не предоставит необходимые сведения. Чтобы это осуществилось, кэшированные обогащения для навыков с #2 по #4 не должны зависеть от #1 (указан для сброса).

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

Не забудьте выполнить выполнение индексатора, чтобы вызвать фактическую обработку.

Как сбросить документы (предварительная версия)

Индексаторы - Сброс документов позволяет принять список ключей документов, чтобы обновить конкретные документы. При указании параметров сброса они становятся единственным определителем обрабатываемого объекта, независимо от других изменений в базовых данных. Например, если с момента последнего запуска индексатора были добавлены или обновлены 20 больших двоичных объектов, но вы сбрасываете только один документ, то обрабатывается только этот документ.

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

Если источник данных — Azure Data Lake Storage (ADLS) Gen2, и блобы связаны с метаданными разрешений, эти разрешения также повторно интегрируются в индекс поиска, если разрешения изменяются в базовых данных. Для получения дополнительной информации см. Повторное индексирование области ACL и RBAC с помощью индексаторов ADLS Gen2.

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

При первом тестировании этого API следующие API помогут вам проверить и протестировать функциональность. Вы можете использовать предварительный просмотр API версии 2020-06-30-preview и более поздних версий. Рекомендуется использовать последнюю предварительную версию API.

  1. Вызов Индексаторы — Получить статус с тестовой версией API для проверки статуса сброса и выполнения. Сведения о запросе на сброс можно найти в конце ответа о состоянии.

  2. Вызов Индексаторы - Сброс документов с предварительной версией API, чтобы указать, какие документы следует обработать.

    POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2024-05-01-preview
    {
        "documentKeys" : [
            "1001",
            "4452"
        ]
    }
    
    • Ключи документов, указанные в запросе, — это значения из поискового индекса, которые могут отличаться от соответствующих полей в источнике данных. Если вы не уверены в значении ключа, отправьте запрос , чтобы вернуть значение. Можно использовать select для возврата только поля ключа документа.

    • Для больших двоичных объектов, которые разбираются на несколько документов поиска (где для синтаксического анализа задано значение jsonLines или jsonArrays, или delimitedText), ключ документа создается индексатором и может быть неизвестен вам. В этом сценарии запрос ключа документа возвращает правильное значение.

  3. Вызовите индексатор (любой версии API), чтобы обработать указанные документы. Индексируются только те определенные документы.

  4. Вызовите Запустить индексатор во второй раз, чтобы обработать с последнего места остановки.

  5. Запустите Поиск документов для проверки обновленных значений и чтобы также вернуть ключи документов, если вы не уверены в значениях. Используйте "select": "<field names>", если нужно ограничить поля, отображаемые в ответе.

Перезапись списка ключей документа

Вызов API сброса документов несколько раз с различными ключами добавляет новые ключи в список сброса ключей документов. Вызов API с параметром overwrite true перезаписывает текущий список новым:

POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2020-06-30-Preview
{
    "documentKeys" : [
        "200",
        "630"
    ],
    "overwrite": true
}

Как повторно синхронизировать индексаторы (предварительная версия)

Resync Indexers — это новый API предварительной версии, который выполняет частичный переиндекс всех документов. Индексатор считается синхронизированным с его источником данных, если определенные поля всех документов в целевом индексе согласованы с данными в источнике данных. Как правило, индексатор достигает синхронизации после успешного начального запуска. Если документ удаляется из источника данных, индексатор остается синхронизированным в соответствии с этим определением. Однако во время следующего запуска индексатора соответствующий документ в целевом индексе будет удален при включении отслеживания удаления.

Если документ изменяется в источнике данных, индексатор становится несинхронизованным. Как правило, механизмы отслеживания изменений будут повторно синхронизировать индексатор во время следующего запуска. Например, в службе хранилища Azure изменение объекта blob обновляет время последнего изменения, что позволяет повторно индексировать его при последующем запуске индексатора, так как обновленное время превышает метку высокой воды, заданную предыдущим запуском.

С другой стороны, для некоторых источников данных, таких как ADLS Gen2, изменение списков управления доступом (ACL) блоба не изменяет время последнего изменения, что делает отслеживание изменений неэффективным, если списки управления доступом должны быть обработаны. Следовательно, измененный двоичный объект не будет переиндексирован при следующем запуске, так как обрабатываются только документы, измененные после последнего контрольного значения.

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

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

Как повторно синхронизировать и запускать индексаторы

  1. Вызовите Индексаторы - Ресинхронизация с предварительной версией API, чтобы определить, какое содержимое необходимо повторно синхронизировать.

    POST https://[service name].search.windows.net/indexers/[indexer name]/resync?api-version=2025-05-01-preview
    {
        "options" : [
            "permissions"
        ]
    }
    
    • Поле options является обязательным. В настоящее время единственным поддерживаемым вариантом является permissions. То есть будут обновлены только поля фильтра разрешений в целевом индексе.
  2. Вызовите команду Run Indexer (в любой версии API), чтобы повторно синхронизировать индексатор.

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

Проверьте состояние сброса "currentState"

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

  1. Вызовите состояние индексатора с помощью API предварительной версии.

    API предварительного просмотра вернет раздел currentState, найденный в конце ответа.

    "currentState": {
        "mode": "indexingResetDocs",
        "allDocsInitialTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}",
        "allDocsFinalTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}",
        "resetDocsInitialTrackingState": null,
        "resetDocsFinalTrackingState": null,
        "resyncInitialTrackingState": null,
        "resyncFinalTrackingState": null,
        "resetDocumentKeys": [
            "200",
            "630"
        ]
    }
    
  2. Проверьте режим:

    Для параметра "Сброс навыков" необходимо установить "режим" в indexingAllDocs (так как потенциально все документы затрагиваются с точки зрения полей, которые заполняются с помощью обогащения ИИ).

    Для индексаторов Resync "mode" должен быть установлен в indexingResync. Индексатор проверяет все документы и фокусируется на заинтересованных данных в источнике данных и заинтересованных полях в целевом индексе.

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

  3. После повторной обработки документов снова выполните команду "Get Indexer Status". Индексатор возвращается в indexingAllDocs режим и обрабатывает все новые или обновленные документы при следующем запуске.

Следующие шаги

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

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