Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
При создании запросов в службе поиска ИИ Azure можно выбрать полный синтаксис Синтаксического анализа запросов Lucene для специализированных форм запросов: подстановочный знак, нечеткий поиск, поиск близкого взаимодействия, регулярные выражения. Большая часть синтаксиса Синтаксического анализа запросов Lucene реализована без изменений в поиске ИИ Azure, за исключением поисков по диапазону, которые создаются с помощью $filter конструкций.
Чтобы использовать полный синтаксис Lucene, задайте тип запроса full и передайте выражение запроса, предназначенное для подстановочных знаков, нечеткого поиска или одной из других форм запросов, поддерживаемых полным синтаксисом. В REST выражения запросов предоставляются в параметре search запроса Поиска документов (REST API).
Пример (полный синтаксис)
Следующий пример представляет собой поисковый запрос, созданный с использованием полного синтаксиса. В этом конкретном примере показано повышение полей поиска и фраз. Он ищет отели, где поле категории содержит термин budget. Документы, содержащие фразу "recently renovated", получают дополнительный повышающий вес и в результате могут ранжироваться выше благодаря значению усиления фразы (3).
POST /indexes/hotels-sample/docs/search?api-version=2026-04-01
{
"queryType": "full",
"search": "category:budget AND \"recently renovated\"^3",
"searchMode": "all"
}
Несмотря на то что параметр searchMode не относится к какому-либо типу запроса, в данном примере он является актуальным. Всякий раз, когда операторы используются в запросе, необходимо настроить searchMode=all, чтобы гарантировать, что все критерии соответствуют.
Для дополнительных примеров см. примеры синтаксиса запросов Lucene. Дополнительные сведения о запросе и параметрах запроса, включая searchMode, см. в разделе Поиск документов (REST API).
Основы синтаксиса
Следующие основные сведения о синтаксисе применяются ко всем запросам, которые используют синтаксис Lucene.
Оценивание операторов в контексте
Размещение определяет, как будет интерпретироваться символ: как оператор или просто как другой знак в строке.
Например, в полном синтаксисе Lucene тильда (~) используется как для нечеткого поиска, так и для поиска по близости. При размещении после кавычки ~ вызывает поиск по близости. При размещении в конце термина ~ вызывает нечеткий поиск.
В термине, например business~analyst, символ не интерпретируется как оператор. В этом случае, если запрос является термином или фразовым запросом, полнотекстовый поиск с лексическим анализом удаляет ~ и разбивает термин business~analyst на два: business OR analyst.
Приведенный выше пример — тильда (~), но тот же принцип применяется к каждому оператору.
Экранирование специальных знаков
Чтобы использовать любой из операторов поиска как часть искомого текста, необходимо экранировать его, добавив перед символом одну обратную косую черту (\). Например, для поиска с подстановочными знаками в https://, где :// является частью строки запроса, необходимо указать search=https\:\/\/*. Аналогично, экранированный шаблон номера телефона может выглядеть следующим образом: \+1 \(800\) 642\-7676.
Специальные символы, которые требуют экранирования, включают следующее:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
Note
Несмотря на то что экранирование предотвращает разрыв токенов, лексический анализ во время индексирования может их разделить. Например, стандартный анализатор Lucene будет разбивать слова на дефисы, пробелы и другие символы. Если в строке запроса необходимо использовать специальные символы, может потребоваться анализатор, сохраняющий их в индексе. Можно, например, использовать анализаторы естественного языка Майкрософт, которые сохраняют слова с дефисом, или пользовательский анализатор для более сложных шаблонов. Дополнительные сведения см. в частичных терминах, шаблонах и специальных знаках.
Кодирование небезопасных и зарезервированных знаков в URL-адресах
Убедитесь, что в URL-адресе закодированы все небезопасные и зарезервированные знаки. Например, это небезопасный символ, # так как это идентификатор фрагмента или привязки в URL-адресе. Знак должен быть закодирован как %23, если он используется в URL-адресе.
& и = являются примерами зарезервированных символов в качестве параметров разделителя и указания значений в поиске ИИ Azure. Дополнительные сведения см. в разделе RFC1738: Унифицированные указатели ресурсов (URL).
Небезопасными знаками являются: " ` < > # % { } | \ ^ ~ [ ]. Зарезервированными знаками являются: ; / ? : @ = + &.
Логические операторы
Чтобы повысить точность совпадения, можно внедрить в строку запроса логические операторы. В дополнение к символьным операторам полный синтаксис поддерживает текстовые операторы. Всегда указывайте текстовые логические операторы (AND, OR, NOT) прописными буквами.
| Текстовый оператор | Character | Example | Usage |
|---|---|---|---|
| AND | + |
wifi AND luxury |
Задает термины, которые должны содержаться в соответствии. В примере обработчик запросов ищет документы, содержащие оба wifi и luxury. Знак плюса (+) также можно использовать непосредственно перед термином, чтобы сделать его обязательным. Например, +wifi +luxury указывает, что оба термина должны появляться где-то в поле одного документа. |
| OR | (нет) 1 | wifi OR luxury |
Поиск совпадения при обнаружении хотя бы одного из терминов. В этом примере обработчик запросов возвращает совпадения для документов, содержащих либо wifi, либо luxury, либо оба элемента. При использовании searchMode=any, OR является оператором сочетания по умолчанию, поэтому wifi luxury эквивалентен wifi OR luxury. С помощью searchMode=all используйте явный оператор OR, чтобы получить такое поведение. |
| NOT |
!, - |
wifi –luxury |
Возвращает результат для документов, которые исключают термин. Например, wifi –luxury выполняет поиск документов, имеющих wifi термин, но не luxury. |
1 Символ | не поддерживается для операций OR.
Булев оператор NOT
Important
Оператор NOT (NOT, !или -) работает по-разному в полном синтаксисе, чем в простом синтаксисе.
- В простом синтаксисе запросы с отрицанием всегда добавляют подстановочные знаки автоматически. Например, запрос
-luxuryавтоматически развертывается в-luxury *. - В полном синтаксисе запросы с отрицанием нельзя объединить с подстановочными символами. Например, запросы
-luxury *не допускаются. - В полном синтаксисе запросы с одним отрицанием не допускаются. Например, запрос
-luxuryне разрешен. - В полном синтаксисе отрицание будет вести себя так, как если бы оно всегда добавлялось с операцией И в запрос, вне зависимости от режима поиска.
- Например, полный синтаксис запроса
wifi -luxuryв полном синтаксисе получает только документы, содержащие терминwifi, а затем применяет отрицание-luxuryк этим документам.
- Например, полный синтаксис запроса
- Если вы хотите использовать отрицания для поиска по всем документам в индексе, рекомендуется использовать простой синтаксис с режимом
anyпоиска. - Если вы хотите использовать отрицания для поиска по подмножествам документов в индексе, рекомендуется использовать полный синтаксис или простой синтаксис с режимом "все".
| Тип запроса | Режим поиска | Пример запроса | Behavior |
|---|---|---|---|
| Simple | any | wifi -luxury |
Возвращает все документы в индексе. Документы с термином "вайфай" или документы, в которых отсутствует термин "роскошь", ранжируются выше, чем другие документы. Запрос развернут до wifi OR -luxury OR *. |
| Simple | all | wifi -luxury |
Возвращает только документы в индексе, содержащие термин "wifi" и не содержат термин "роскошь". Запрос развернут до wifi AND -luxury AND *. |
| Full | any | wifi -luxury |
Возвращает только документы в индексе, содержащие термин "wifi", а затем документы, содержащие термин "роскошь", удаляются из результатов. |
| Full | all | wifi -luxury |
Возвращает только документы в индексе, содержащие термин "wifi", а затем документы, содержащие термин "роскошь", удаляются из результатов. |
Поиск по полю
Можно определить операцию поиска по полям с синтаксисом fieldName:searchExpression, где выражение поиска представляет собой одно слово или фразу, или более сложное выражение в круглых скобках (при необходимости с логическими операторами). Вот несколько примеров.
genre:jazz NOT historyartists:("Miles Davis" "John Coltrane")
Добавьте несколько строк в кавычках, если необходимо, чтобы обе строки считались одной сущностью, в приведенном случае поиска двух разных исполнителей в поле artists.
Поле, указанное в fieldName:searchExpression, должно быть полем searchable. Дополнительные сведения об использовании атрибутов индекса в определениях полей см. в статье Create Index (Azure Search Service REST API) (Создание индексов (REST API службы "Поиск Azure")).
Note
При использовании выражений для поиска по полям не нужно использовать параметр searchFields, так как каждое выражение для поиска по полям имеет явно заданное имя поля. Тем не менее можно по-прежнему использовать параметр searchFields, если требуется выполнить запрос, в котором некоторые части ограничены определенным полем, а остальные можно применить к нескольким полям. Например, запрос search=genre:jazz NOT history&searchFields=description будет сопоставлять jazz только с полем genre, в то время как NOT history — с полем description. Имя поля, указанное в fieldName:searchExpression, всегда имеет приоритет над параметром searchFields, поэтому в данном примере не нужно включать genre в параметр searchFields.
Нечеткий поиск
При поиске нечетких соответствий обнаруживаются совпадения в терминах, имеющих похожую конструкцию, при этом термин расширяется не более чем до 50 терминов, отвечающих критериям расстояния в два или менее. Дополнительные сведения см. в статье Поиск нечетких соответствий.
Чтобы выполнить нечеткий поиск, используйте символ тильды ~ в конце одного слова с необязательным параметром, число от 0 до 2 (по умолчанию), указывающее расстояние редактирования. Например, blue~ или blue~1 возвращать blue, bluesи glue.
Нечеткий поиск может применяться только к терминам, а не к фразам, заключенным в кавычки, но можно добавить тильду к каждому термину по отдельности в многокомпонентном имени или фразе. Например, Unviersty~ of~ Wshington~ будет соответствовать University of Washington.
Поиск по близости
Операция поиска с учетом расположения позволяет найти слова, расположенные рядом в документе. Вставьте символ тильды ~ в конце фразы, за которым следует число слов, создающих границу близости. Например, "hotel airport"~5 находит термины hotel и airport в пределах пяти слов друг от друга в документе.
Усиление значимости терминов
Представьте поиск как процесс из двух шагов. Во-первых, Поиск с использованием ИИ Azure находит соответствующие документы. Затем он ранжирует эти матчи. Повышение терминов влияет только на второй шаг: он может перемещать документы, соответствующие одной части запроса выше в результатах.
Повышение терминов отличается от профиля оценки. Повышение способствует слову, фразе или группе в текущем запросе. Профиль оценки предпочитает поля или другое содержимое индекса в соответствии с правилами, определенными в индексе.
Область действия усиления
Напишите знак карета (^) и положительное число сразу после той части запроса, которой вы хотите отдать предпочтение. Например, tax^2 может поднять документы, содержащие tax, выше документов, соответствующих только термину без повышения веса. Значение повышения по умолчанию равно 1. Вы также можете использовать значение от 0 до 1, например 0.2, чтобы уменьшить вес совпадения.
Знак препинания указывает, какие слова влияют на каждую инструкцию:
- Имя поля с двоеточием, называемое префиксом поля, ставится перед словом, фразой в кавычках или группой в скобках. Например,
content:указывает Поиск с использованием ИИ Azure искать в полеcontent. - Усиление, например
^2, ставится после слова, фразы в кавычках или группы в круглых скобках. Он указывает Поиск с использованием ИИ Azure, чему следует отдавать предпочтение при ранжировании совпадений.
В следующей таблице используется значение по умолчанию searchMode=any, в котором пространство между словами работает примерно так OR.
| Query | Что может соответствовать | Что дает ускорение |
|---|---|---|
deferred tax^2 |
deferred, tax или оба варианта. |
Только слово tax. |
"deferred tax"^2 |
Полная фраза с словами рядом друг с другом и в этом порядке. | Полная фраза. |
(deferred OR tax)^2 |
deferred, tax или оба варианта. |
Все внутри скобки как одна группа. |
С оператором searchMode=all запрос deferred tax^2 требует совпадения обоих слов. Повышение по-прежнему применяется только к tax. Чтобы вместо этого сопоставить любое из этих слов, напишите deferred OR tax^2.
Поместите курсор после закрывающей кавычки или скобки, если вы хотите увеличить всю фразу или группу. Круглые скобки не создают фразу. Используйте кавычки, когда слова должны находиться рядом друг с другом и в определенном порядке.
Усиление и область действия поля
Имя поля, за которым следует двоеточие, ограничивает область, в которой Поиск с использованием ИИ Azure выполняет поиск. Повышающий коэффициент изменяет то, как Поиск с использованием ИИ Azure ранжирует результаты поиска. В одном запросе можно использовать оба варианта.
| Query | Что это означает |
|---|---|
content:deferred tax^2 |
Префикс поля применяется только к deferred. В отдельной части tax^2 используются поля, выбранные с помощью searchFields, или все поля, доступные для поиска, если searchFields не указан.
taxСовпадение получает дополнительный вес при ранжировании. |
content:"deferred tax"^2 |
Найдите полную фразу только в content, и присвойте этой фразе дополнительный вес ранжирования. |
content:(deferred OR tax)^2 |
Ищите одно из этих слов только в content и присвойте сгруппированному совпадению дополнительный вес при ранжировании. |
Например, если searchFields задано значение title, первый запрос ищет deferred в content и tax в title. Кавычки и круглые скобки в других запросах сохраняют оба слова в content.
Important
Двоеточие и запятая работают в противоположных направлениях. Префикс content: поля применяется к части запроса после нее. Усиление ^2 применяется к той части запроса, которая ему предшествует. Используйте кавычки или скобки, чтобы эта часть включала несколько слов. Дополнительные сведения см. в разделе "Поле поиска" и "Приоритет" (группирование).
Влияние анализатора на увеличенные запросы
Для обычных слов, фраз и групп слов повышение не пропускает анализ текста. Перед сопоставлением Поиск с использованием ИИ Azure по-прежнему обрабатывает текст запроса с помощью анализатора каждого поля. В результате один и тот же увеличенный текст может совпадать по-разному в полях, использующих различные анализаторы.
Фраза или группа с префиксом поля использует анализатор этого поля. Текст без префикса имени поля использует анализатор каждого поля, по которому выполняется поиск. Например, анализатор, преобразующий текст в нижний регистр, может сопоставлять "DEFERRED TAX"^2 с индексированными терминами в нижнем регистре.
Другие формы запросов, такие как подстановочные знаки, регулярные выражения и нечеткие запросы, используют различные правила анализа. Добавление ускорения не меняет этих правил. Дополнительные сведения см. в разделе "Этап 2: Лексический анализ".
Поиск регулярных выражений
Операция поиска по регулярным выражениям позволяет найти совпадение на основе шаблонов, допустимых в Apache Lucene, как указано в документации класса RegExp.
В службе "Поиск ИИ Azure" регулярное выражение:
- Заключены между косой чертой вперед
/ - Только нижний регистр
Например, чтобы найти документы, содержащие motel или hotel, укажите /[mh]otel/. Поиск с регулярными выражениями сопоставляется с отдельными словами.
Некоторые средства и языки накладывают дополнительные требования к escape-символам за пределами правил , введенных поиском ИИ Azure. Для JSON строки, включающие прямой слэш, экранируются с помощью обратной косой черты: microsoft.com/azure/ становится search=/.*microsoft.com\/azure\/.*/, где search=/.* <string-placeholder>.*/ определяет регулярное выражение, а microsoft.com\/azure\/ это строка с экранированным прямым слэшем.
Два распространенных символа в регулярных выражениях: . и *.
. соответствует любому одному символу, а * повторяет предыдущий символ ноль или более раз. Например, /be./ совпадает с терминами bee и bet, в то время как /be*/ соответствует be, bee и beee, но не bet. Вместе .*, они позволяют сопоставить любую последовательность символов, так что /be.*/ будет соответствовать любому термину, начинающемуся с be, например, better.
Если в регулярном выражении возникают синтаксические ошибки, просмотрите правила escape-обхода для специальных символов. Вы также можете попробовать другой клиент, чтобы убедиться, что проблема связана с инструментом.
Поиск подстановочных знаков
Вы можете использовать общепризнанный синтаксис для поиска с использованием подстановочных знаков для нескольких символов (*) или одного символа (?). Полный синтаксис Lucene поддерживает сопоставление префиксов и инфиксов. Используйте синтаксис регулярных выражений для сопоставления суффикса.
Обратите внимание, что средство синтаксического анализа запросов Lucene поддерживает использование этих символов для поиска одного слова, а не фразы.
| Тип аффикса | Описание и примеры |
|---|---|
| prefix | Фрагмент термина предшествует * или ?. Например, выражение запроса search=alpha* возвращает alphanumeric или alphabetical. Сопоставление префикса поддерживается как в простом, так и в полном синтаксисе. |
| suffix | Фрагмент термина следует после * или ?, с прямой косой чертой для разграничения конструкции. Например, search=/.*numeric/ возвращает alphanumeric. |
| infix | Фрагменты терминов заключены в * или ?. Например, search=non*al возвращает non-numerical и nonsensical. |
В одном выражении можно комбинировать различные операторы. Например, 980?2* соответствует 98072-1222 и 98052-1234, где ? соответствует одному (обязательному) символу, а * соответствует символам произвольной длины, которые идут после.
Сопоставление по суффиксам требует разделителей наклонной черты для регулярного выражения /. Как правило, нельзя использовать * символ или ? символ в качестве первого символа термина без символа /. Также важно отметить, что * ведет себя по-другому при использовании вне регулярных выражений. За пределами косой черты /, служащей разделителем в регулярных выражениях, символ * является подстановочным знаком и соответствует любой серии символов, так же как .* в regex. Например, search=/non.*al/ генерирует тот же набор результатов, что и search=non*al.
Note
Как правило, сопоставление шаблонов является медленным, поэтому рекомендуется изучить альтернативные методы, такие как токенизация с использованием крайних N-грамм, создающая токены для последовательностей символов в термине. В разметке N-грамм индекс будет больше, но запросы могут выполняться быстрее в зависимости от конструкции шаблона и длины индексируемых строк. Дополнительные сведения см. в разделе Поиск частично введенных слов и шаблоны со специальными символами.
Влияние анализатора на запросы с подстановочными знаками
Во время синтаксического анализа запросы, сформулированные как префикс, суффикс, подстановочный знак или регулярные выражения, передаются в дерево запросов "как есть", минуя лексический анализ. Совпадения будут обнаружены, только если индекс содержит строки в формате, указанном в запросе. В большинстве случаев требуется анализатор во время индексирования, который сохраняет целостность строк, чтобы частичное сопоставление терминов и шаблонов завершилось успешно. Дополнительные сведения см. в разделе "Частичный поиск терминов" в запросах поиска ИИ Azure.
Рассмотрим ситуацию, когда может потребоваться, чтобы поисковый запрос terminal* возвращал результаты, содержащие такие термины, как terminate, terminationи terminates.
При использовании анализатора en.lucene (английский Lucene) применялось бы агрессивное стеммирование каждого термина. Например, terminate, termination, terminates все будут токенизированы в один маркер termi в вашем индексе. С другой стороны, термины в запросах с использованием подстановочных знаков или нечеткого поиска не анализируются вообще, поэтому не было бы результатов, которые будут соответствовать запросу terminat* .
С другой стороны, анализаторы Microsoft (в нашем примере это анализатор en.microsoft) более продвинуты и используют лемматизацию вместо стемминга. Это означает, что все созданные маркеры должны быть реально существующими английскими словами. Например, terminate, terminates и termination, в основном, остаются целыми в индексе и будут предпочтительным выбором для сценариев, которые сильно зависят от подстановочных знаков и нечеткого поиска.
Note
Подстановочные знаки, префикс и термины запроса regex соответствуют литеральным токенам в индексе. Поскольку большинство анализаторов преобразуют индексируемое содержимое в нижний регистр, термин в верхнем регистре, такой как Contoso*, может не совпасть с токеном, например contoso. Преобразуйте эти термины запроса в приложении в нижний регистр в соответствии с правилами приведения регистра анализатора, назначенного этому полю.
Оценка подстановочных знаков и регулярных выражений
Поиск по искусственному интеллекту Azure использует оценку на основе частоты (BM25) для текстовых запросов. Однако для запросов с подстановочными знаками и регулярными выражениями, где область терминов может быть широкой, фактор частоты игнорируется, чтобы предотвратить смещение ранжирования в сторону совпадений с более редкими терминами. Все совпадения обрабатываются одинаково при поиске с использованием подстановочных знаков и регулярных выражений.
Специальные символы
В некоторых случаях может потребоваться искать специальный символ, например, эмодзи «❤» или знак «€». В таких случаях убедитесь, что используемый анализатор не фильтрует эти символы. Стандартный анализатор проходит множество специальных символов, исключая их из индекса.
Анализаторы, которые маркеризируют специальные символы, включают анализатор пробелов, который учитывает все последовательности символов, разделенные пробелами в виде маркеров (поэтому ❤ строка будет считаться маркером). Кроме того, анализатор языка, например анализатор Microsoft для английского языка (en.microsoft), принимает строку "€" в качестве токена. Можно проверить анализатор, чтобы узнать, какие токены он создает для данного запроса.
При использовании символов Юникода убедитесь, что символы правильно экранируются в URL-адресе запроса (например, для ❤ следует использовать escape-последовательность %E2%9D%A4+). Некоторые клиенты REST выполняют этот перевод автоматически.
Приоритет (группирование)
Используйте круглые скобки, чтобы контролировать, какие части запроса вычисляются вместе. Например, для motel AND (wifi OR luxury) требуется motel и по крайней мере один из терминов в скобках: wifi или luxury.
Поместите префикс поля перед скобками для поиска всей группы в одном поле. Например, hotelAmenities:(wifi OR pool) ищет wifi или pool только в hotelAmenities поле.
Круглые скобки управляют тем, как AND и OR работать вместе. Они не требуют, чтобы слова отображались рядом друг с другом или в определенном порядке. Используйте кавычки для этого поведения. Чтобы усилить группу, установите курсор после закрывающей скобки, как показано в hotelAmenities:(wifi OR pool)^2. Дополнительные сведения см. в разделе "Область повышения".
Предельные размеры запроса
Поиск ИИ Azure накладывает ограничения на размер и композицию запросов, так как несвязанные запросы могут дестабилизировать службу поиска. Существуют ограничения на размер запроса и композицию (количество предложений). Ограничения также существуют для длины поиска по префиксу и для сложности поиска по регулярным выражениям и поиска с использованием подстановочных знаков. Если приложение создает поисковые запросы программными средствами, рекомендуется создать его таким образом, чтобы он не создавал запросы необвязанного размера.
Дополнительные сведения об ограничениях запросов см. в разделе об ограничениях запросов API.