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


Создание индексатора в Azure AI Search

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

Индексатор можно использовать для автоматизации импорта и индексирования данных в Azure AI Search. Индексатор — это именованный объект в search service, который подключается к внешнему источнику данных Azure, считывает и сериализует данные и передает его поисковой системе для индексирования. Использование индексаторов значительно сокращает объем и сложность кода, который требуется написать для поддерживаемых источников данных.

Индексаторы поддерживают два рабочих процесса:

  • Индексирование необработанного содержимого (обычный текст или векторы): извлекает строки и метаданные из текстового содержимого для сценариев полнотекстового поиска. Он также извлекает необработанное векторное содержимое для поиска векторов (например, векторов в коллекции Azure SQL database или Azure Cosmos DB). В этом рабочем процессе индексирование происходит только по существующему содержимому, которое вы предоставляете.

  • Индексирование на основе навыков: расширяет индексирование с помощью встроенных или пользовательских навыков, которые создают новое содержимое, которое можно найти. Например, можно интегрировать машинное обучение для анализа изображений и неструктурированного текста, чтобы извлекать или выводить текст и структуру. Вы также можете использовать навыки для разбиения и векторизации содержимого из текста и изображений. Индексирование на основе навыков создает новое содержимое, которое не существует в внешнем источнике данных. Новое содержимое становится частью индекса при добавлении полей в схему индекса, которая принимает входящие данные. Дополнительные сведения см. в статье AI обогащения в Azure AI Search.

Prerequisites

  • Поддерживаемый источник данных, содержащий содержимое, которое требуется принять.

  • Определение источника данных , которое настраивает подключение к внешним данным.

  • Индекс поиска, который может принимать входящие данные.

  • В пределах максимальных лимитов вашего уровня обслуживания. Уровень "Бесплатный" позволяет по три объекта каждого типа и 1-3 минуты обработки индексатором, либо 3-10 минут при наличии набора навыков.

Шаблоны индексатора

При создании индексатора определение следует одному из двух шаблонов: индексирование на основе содержимого или индексирование на основе навыков. Шаблоны похожи, но индексирование на основе навыков включает дополнительные свойства.

Пример индексатора для индексирования на основе содержимого

Индексирование на основе контента для полнотекстового или векторного поиска является основным вариантом использования индексаторов. Для этого рабочего процесса индексатор выглядит следующим образом.

{
  "name": (required) String that uniquely identifies the indexer,
  "description": (optional),
  "dataSourceName": (required) String indicating which existing data source to use,
  "targetIndexName": (required) String indicating which existing index to use,
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": false,
    "configuration": {}
  },
  "fieldMappings": (optional) unless field discrepancies need resolution,
  "disabled": null,
  "schedule": null,
  "encryptionKey": null
}

Индексаторы имеют следующие требования:

  • name Свойство, однозначно определяющее индексатор в коллекции индексатора
  • Свойство dataSourceName , указывающее на объект источника данных. Он указывает подключение к внешним данным
  • Свойство targetIndexName , указывающее на индекс целевого поиска

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

Индексы, специфичные для источников данных больших двоичных объектов, SQL и Azure Cosmos DB, предоставляют дополнительные параметры configuration для поведения, специфичного для источника. Например, если источник Blob Storage, можно задать параметр для фильтрации по расширению файла, например:

"parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }

Если источник Azure SQL, можно задать параметр времени ожидания запроса.

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

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

Можно также указать расписание или задать ключ шифрования для дополнительного шифрования определения индексатора.

Пример индексатора для индексирования на основе навыков

Индексирование на основе навыков использует обогащение ИИ для обработки содержимого, который недоступен для поиска в необработанной форме. Применяются все предыдущие свойства и параметры, но следующие дополнительные свойства относятся к обогащению ИИ: skillsetName, , cacheoutputFieldMappings.

{
  "name": (required) String that uniquely identifies the indexer,
  "dataSourceName": (required) String, provides raw content that will be enriched,
  "targetIndexName": (required) String, name of an existing index,
  "skillsetName" : (required for AI enrichment) String, name of an existing skillset,
  "cache":  {
    "storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
    "enableReprocessing": true
    },
  "parameters": { },
  "fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
  "outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}

Обогащение ИИ является собственной предметной областью и выходит за рамки этой статьи. Дополнительные сведения см. в AI-обогащение, Skillsets в Azure AI Search, Создать набор навыков, Сопоставление обогащенных выходных полей и Включить кэширование для AI-обогащения.

Подготовка внешних данных

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

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

Чтобы развернуть реляционные данные в набор строк, создайте представление SQL или создайте запрос, возвращающий родительские и дочерние записи в одной строке. Например, встроенный набор данных для отелей — это база данных SQL с 50 записями (по одному для каждого отеля), связанная с записями комнат в связанной таблице. Запрос, который сводит коллективные данные в набор строк, включает всю информацию о комнатах в документы JSON для каждой записи отеля. Встроенная информация о помещении создаётся запросом с использованием конструкции FOR JSON AUTO.

Дополнительные сведения об этом методе см. в статье Определение запроса, возвращающего внедренный код JSON. Это всего лишь один пример. вы можете использовать другие подходы, которые приводят к тому же результату.
Files Индексатор обычно создает один документ поиска для каждого файла, где документ поиска состоит из полей для содержимого и метаданных. В зависимости от типа файла индексатор иногда может разбирать один файл на несколько документов для поиска. Например, в CSV-файле каждая строка может стать автономным документом поиска.

Помните, что вам нужно принимать только данные, которые можно искать и фильтровать.

  • Данные, доступные для поиска, — это текст или векторы
  • Отфильтрованные данные — это текст и числа (не векторные поля)

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

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

Подготовка источника данных

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

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

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

  3. Если источник данных является базой данных, например Azure SQL или Cosmos DB, включите change tracking. Azure Storage имеет встроенное отслеживание изменений через свойство LastModified для каждого блоба, файла и таблицы. Ссылки на различные источники данных объясняют, какие методы отслеживания изменений поддерживаются индексаторами.

Подготовка индекса

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

  1. Начните с создания индекса поиска.

  2. Настройте коллекцию полей и атрибуты полей.

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

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

  3. Просмотрите назначения анализатора в каждом поле. Анализаторы могут преобразовывать строки. Таким образом индексированные строки могут отличаться от переданных вами строк. Вы можете оценить влияние анализаторов с помощью функции анализа текста (REST). Дополнительные сведения об анализаторах см. в разделе Анализаторы для обработки текста.

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

Создать индексатор

Когда вы готовы создать индексатор на удаленной поисковой службе, вам потребуется поисковый клиент. Клиент поиска может быть Azure portal, клиент REST или код приложения, который создает экземпляр клиента индексатора. Мы рекомендуем Azure portal или REST API для раннего разработки и проверки концепции.

  1. Войдите в Azure portal и выберите search service.

  2. Выберите один из следующих параметров:

    • Импорт данных: мастер создает все необходимые элементы, включая индексатор. Для других подходов требуется предопределенный источник данных и индекс.

      Снимок экрана: мастер импорта данных.

    • Добавление индексатора: визуальный редактор для указания определения индексатора.

      Снимок экрана: кнопка

Запуск индексатора

По умолчанию индексатор выполняется сразу после его создания на поисковой службе. Это поведение можно переопределить, установив disabledзначение true в определении индексатора. Выполнение индексатора — это момент истины, в котором вы узнаете, возникают ли проблемы с подключениями, сопоставлениями полей или построением набора навыков.

Запустить индексатор можно несколькими способами:

  • Запуск при создании или обновлении индексатора (по умолчанию).

  • Запустите по запросу, если в определении нет изменений, или выполните сброс перед полным индексированием. Дополнительные сведения см. в разделе "Запуск или сброс индексаторов".

  • Запланируйте обработку индексатора для вызова выполнения через регулярные интервалы.

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

Индексаторы — это одна из немногих подсистем, которые выполняют исходящие вызовы для других Azure ресурсов. С точки зрения ролей Azure индексаторы не имеют отдельных удостоверений; подключение от поисковой системы к другому ресурсу Azure выполняется с помощью системы или управляемого удостоверения, назначаемого пользователем search service. Если индексатор подключается к ресурсу Azure в virtual network, необходимо создать shared private link для этого подключения. Для получения дополнительной информации см. раздел Безопасный доступ к внешним данным.

Проверка результатов

Мониторинг состояния индексатора для проверки состояния выполнения. Успешное выполнение по-прежнему может включать предупреждения и уведомления. Обязательно проверьте как успешные, так и неудачные уведомления о статусе, чтобы получить подробности о задании.

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

Обнаружение изменений и внутреннее состояние

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

Логика обнаружения изменений встроена в платформы данных. То, как индексатор поддерживает обнаружение изменений, зависит от источника данных.

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

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