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


Добавление проверки орфографии в запросы в поиске ИИ Azure

Внимание

Проверка орфографии предоставляется в общедоступной предварительной версии в соответствии с дополнительными условиями использования. Она доступна с помощью портал Azure, предварительных версий REST API и бета-версий библиотек пакета SDK Azure.

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

Необходимые компоненты

  • Служба поиска на уровне "Базовый" или выше в любом регионе.

  • Существующий индекс поиска с содержимым на поддерживаемом языке.

  • Запрос , имеющий speller=lexicon и queryLanguage устанавливающий поддерживаемый язык. Проверка орфографии работает на строках, передаваемых в параметре search . Он не поддерживается для фильтров, нечеткого поиска, поиска подстановочных знаков, регулярных выражений или векторных запросов.

Используйте клиент поиска, поддерживающий предварительный просмотр API-интерфейсов в запросе запроса. Вы можете использовать клиент REST или бета-версии пакетов SDK Azure.

Клиентская библиотека Версии
REST API Версии 2020-06-30-Preview и более поздних версий. Рекомендуется использовать последнюю предварительную версию API. 2024-05-01-preview
Пакет Azure SDK для .NET версия 11.5.0-beta.5
Пакет Azure SDK для Java версия 11.6.0-beta.5
Пакет SDK для Azure для JavaScript версия 11.3.0-beta.8
Пакет SDK для Azure для Python версия 11.4.0b3

В следующем примере используется встроенный индекс hotels-sample для демонстрации исправления орфографии в простом текстовом запросе. Без исправления орфографии запрос возвращает нулевые результаты. При исправлении запрос возвращает один результат для курорта, ориентированного на семейство Джонсон (Johnson).

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
    "search": "famly acitvites",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "queryType": "simple",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

Исправление орфографии с полным Lucene

Исправление орфографии возникает в отдельных терминах запроса, которые проходят анализ текста, поэтому можно использовать параметр орфографии с некоторыми запросами Lucene, но не другими.

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

В этом примере используется поиск по полю "Категория" с полным синтаксисом Lucene и неправильное написание термина запроса. После добавления средства проверки орфографии опечатка в слове "Suiite" будет исправлена и запрос будет выполнен успешно.

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
    "search": "Category:(Resort and Spa) OR Category:Suiite",
    "queryType": "full",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "select": "Category",
    "count": true
}

Исправление орфографии с семантическим ранжированием

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

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview    
{
    "search": "hisotoric hotell wiht great restrant nad wiifi",
    "queryType": "semantic",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "searchFields": "HotelName,Tags,Description",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

Поддерживаемые языки

Допустимые значения queryLanguage можно найти в следующей таблице, скопированной из списка поддерживаемых языков (справочник по REST API).

Язык queryLanguage
английский [EN] EN, EN-US (по умолчанию)
испанский [ES] ES, ES-ES (по умолчанию)
французский [FR] FR, FR-FR (по умолчанию)
немецкий [DE] DE, DE-DE (по умолчанию)
Голландский [NL] NL, NL-BE, NL-NL (по умолчанию)

Примечание.

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

Рекомендации по анализатору языка

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

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

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

  • Языковые анализаторы можно вызывать во время индексирования и выполнения запросов, а также Apache Lucene (например, de.lucene) или Microsoft ("de.microsoft").

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

В запросе значение, назначенное для queryLanguage применения speller.

Примечание.

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

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

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