Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
В Поиск с использованием ИИ Azure нормализатор — это компонент, который предварительно обрабатывает текст для сопоставления ключевых слов по полям, помеченным как фильтруемый, "аспектируемый" или "сортируемый". В отличие от полей полнотекстового поиска, которые связаны с текстовыми анализаторами, содержимое, созданное для операций сортировки фильтров и аспектов, не проходит анализ или маркеризацию. Отсутствие анализа текста может привести к непредвиденным результатам при возникновении различий в регистре и символах, поэтому вам требуется нормализатор для гомогенизации вариаций в содержимом.
Применяя нормализатор, можно добиться легкого преобразования текста, которые улучшают результаты:
- Согласованный регистр (например, весь нижний или верхний регистр)
- Нормализация акцентов и диакритических элементов, таких как ö или ê в эквивалентные символы ASCII "o" и "e"
- Сопоставьте символы, такие как
-и пробельные символы, с символом, указанным пользователем.
Преимущества нормализаторов
Для поиска и получения документов из индекса поиска требуется сопоставление входных данных запроса с содержимым документа. Сопоставление выполняется либо по маркеризованному содержимому, как в случае вызова "поиска", либо по немаркеризованному содержимому, если запрос является фильтром, фасетом или операцией сортировки.
Так как не маркеризованное содержимое также не анализируется, небольшие различия в содержимом оцениваются как явно разные значения. Рассмотрим следующие примеры:
$filter=City eq 'Las Vegas'будет возвращать только те документы, которые содержат точный текст"Las Vegas"и исключать документы, содержащие"LAS VEGAS"и"las vegas", что становится неадекватным, если необходимо использование всех документов независимо от регистра.search=*&facet=City,count:5будет возвращать"Las Vegas","LAS VEGAS"и"las vegas"как отдельные значения, хотя это один и тот же город.search=usa&$orderby=Cityвозвращает города в лексографическом порядке:"Las Vegas","Seattle""las vegas", даже если намерение состоит в том, чтобы упорядочить те же города вместе независимо от случая.
Нормализатор, который вызывается во время индексирования и выполнения запросов, добавляет легкие преобразования, которые сглаживают незначительные различия в тексте для фильтров, аспектов и сценариев сортировки. В предыдущих примерах варианты "Las Vegas" будут обрабатываться в соответствии с выбранным нормализатором (например, весь текст приводится к нижнему регистру), чтобы получить более унифицированные результаты.
Как указать нормализатор
Нормализаторы указываются в определении индекса для каждого текстового поля (Edm.String и Collection(Edm.String)), которое имеет хотя бы одно из свойств "фильтруемое", "сортируемое" или "аспектируемое" со значением true. Установка нормализатора является необязательным и имеет значение NULL по умолчанию. Перед настройкой настраиваемого нормализатора рекомендуется оценить предопределенные нормализаторы.
Нормализаторы можно указать только при добавлении нового поля в индекс, поэтому, если это возможно, попробуйте оценить потребности нормализации заранее и назначить нормализаторы на начальных этапах разработки, когда удаление и повторное создание индексов является рутинной процедурой.
При создании определения поля в индексе задайте для свойства "нормализатор" одно из следующих значений: предопределенный нормализатор, например "строчные буквы", или настраиваемый нормализатор (определенный в той же схеме индекса).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]Пользовательские нормализаторы определяются в разделе "нормализаторы" индекса сначала, а затем назначены определению поля, как показано на предыдущем шаге. Дополнительные сведения см. в разделе "Создание индекса " и "Добавление настраиваемых нормализаторов".
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Примечание
Чтобы изменить нормализатор существующего поля, перестройте индекс полностью (вы не можете перестроить отдельные поля).
Хорошее решение для производственных индексов, где перестроение индексов является дорогостоящим, заключается в создании нового поля, идентичного старому, но с новым нормализатором. Используйте его вместо старого. Используйте индекс обновления, чтобы включить новое поле и mergeOrUpload, чтобы заполнить его. Позже в рамках планового обслуживания индекса можно очистить индекс, чтобы удалить устаревшие поля.
Предопределенные и настраиваемые нормализаторы
Поиск с использованием ИИ Azure предоставляет встроенные нормализаторы для распространенных вариантов использования вместе с возможностью настройки по мере необходимости.
| Категории | Описание |
|---|---|
| Предопределенные нормализаторы | Предоставляется вне коробки и может использоваться без какой-либо конфигурации. |
| Пользовательские нормализаторы1 | Для расширенных сценариев. Требуется определяемая пользователем конфигурация сочетания существующих элементов, состоящая из фильтров символов и маркеров. |
(1) Пользовательские нормализаторы не указывают токенизаторы, так как нормализаторы всегда создают один токен.
Тестирование нормализатора
Анализатор тестирования (REST) можно использовать, чтобы узнать, как нормализатор обрабатывает входные данные.
Запрос
POST https://[search service name].search.windows.net/indexes/[index name]/analyze?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
"normalizer":"asciifolding",
"text": "Vis-à-vis means Opposite"
}
Ответ
HTTP/1.1 200 OK
{
"tokens": [
{
"token": "Vis-a-vis means Opposite",
"startOffset": 0,
"endOffset": 24,
"position": 0
}
]
}
Справочник по нормализаторам
Предопределенные нормализаторы
| Имя | Описание и параметры |
|---|---|
| Стандартный | Переводит текст в нижний регистр и выполняет преобразование в ASCII. |
| строчные буквы | Преобразует символы в нижний регистр. |
| Прописные | Преобразует символы в верхний регистр. |
| асцифолдинг (преобразование в ASCII) | Преобразует символы, которые находятся вне базового латинского блока Unicode, в их эквиваленты в ASCII, если они существуют. Например, изменение à на a. |
| elision | Удаляет элизии с начала токенов. |
Поддерживаемые фильтры char
Нормализаторы поддерживают два фильтра символов, идентичные их аналогам в пользовательских фильтрах символов анализатора:
Поддерживаемые фильтры маркеров
В приведенном ниже списке показаны фильтры маркеров, поддерживаемые для нормализаторов, и это подмножество общих фильтров маркеров, используемых в пользовательских анализаторах.
- arabic_normalization
- asciifolding
- cjk_width
- эллизия
- german_normalization
- hindi_normalization
- indic_normalization
- персидская нормализация
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- нижний регистр
- Верхний регистр
Добавление настраиваемых нормализаторов
Пользовательские нормализаторы определяются в схеме индекса. Определение содержит имя, тип, один или несколько фильтров символов и фильтров маркеров. Фильтры символов и фильтры маркеров — это стандартные блоки для настраиваемого нормализатора и ответственные за обработку текста. Эти фильтры применяются слева направо.
Это token_filter_name_1 имя фильтра маркеров и char_filter_name_1char_filter_name_2 имена фильтров char (см. поддерживаемые фильтры маркеров и поддерживаемые таблицы фильтров символовниже для допустимых значений).
"normalizers":(optional)[
{
"name":"name of normalizer",
"@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
"charFilters":[
"char_filter_name_1",
"char_filter_name_2"
],
"tokenFilters":[
"token_filter_name_1"
]
}
],
"charFilters":(optional)[
{
"name":"char_filter_name_1",
"@odata.type":"#char_filter_type",
"option1": "value1",
"option2": "value2",
...
}
],
"tokenFilters":(optional)[
{
"name":"token_filter_name_1",
"@odata.type":"#token_filter_type",
"option1": "value1",
"option2": "value2",
...
}
]
Пользовательские нормализаторы можно добавить во время создания индекса или позднее, обновив существующий. Добавление настраиваемого нормализатора в существующий индекс требует, чтобы флаг allowIndexDowntime был указан в индексе обновления и приведет к тому, что индекс будет недоступен в течение нескольких секунд.
Пример настраиваемого нормализатора
В приведенном ниже примере показано определение настраиваемого нормализатора с соответствующими фильтрами символов и фильтрами маркеров. Пользовательские параметры для фильтров символов и фильтров маркеров задаются отдельно как именованные конструкции, а затем ссылаются в определении нормализатора, как показано ниже.
Настраиваемый нормализатор с именем "my_custom_normalizer" определен в разделе "нормализаторы" определения индекса.
Нормализатор состоит из двух фильтров символов и трех фильтров токенов: элизия, фильтр нижнего регистра и настраиваемый фильтр аскифолдинга "my_asciifolding".
Первый фильтр символов "map_dash" заменяет все дефисы символами подчеркивания, а второй — "remove_whitespace" удаляет все пробелы.
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false,
},
{
"name":"city",
"type":"Edm.String",
"filterable": true,
"facetable": true,
"normalizer": "my_custom_normalizer"
}
],
"normalizers":[
{
"name":"my_custom_normalizer",
"@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
"charFilters":[
"map_dash",
"remove_whitespace"
],
"tokenFilters":[
"my_asciifolding",
"elision",
"lowercase",
]
}
],
"charFilters":[
{
"name":"map_dash",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["-=>_"]
},
{
"name":"remove_whitespace",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["\\u0020=>"]
}
],
"tokenFilters":[
{
"name":"my_asciifolding",
"@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"preserveOriginal":true
}
]
}
См. также
Концепции запросов в Поиск с использованием ИИ Azure