Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Für Volltextsuchszenarien implementiert Azure KI-Suche zwei Lucene-basierte Abfragesprachen, die jeweils an einem Abfrageparser ausgerichtet sind. Der Einfache Abfrageparser ist die Standardeinstellung. Es behandelt häufige Anwendungsfälle und Versuche, eine Anforderung zu interpretieren, auch wenn sie nicht perfekt zusammengesetzt ist. Der andere Parser ist Lucene Query Parser und unterstützt komplexere Abfragekonstruktionen.
Dieser Artikel ist die Abfragesyntaxreferenz für den einfachen Abfrageparser.
Die Abfragesyntax für beide Parser bezieht sich auf Abfrageausdrücke, die im search Parameter eines Abfrageantrags übergeben werden. Sie darf nicht mit der OData-Syntax verwechselt werden, die ihre eigene Syntax und Regeln für filter und orderby Ausdrücke in derselben Anfrage hat.
Obwohl der einfache Parser auf der Apache Lucene Simple Query Parser-Klasse basiert, schließt die Implementierung in Azure KI-Suche fuzzy search aus. Wenn Sie Fuzzy-Suche benötigen, sollten Sie stattdessen die alternative vollständige Lucene-Abfragesyntax in Betracht ziehen.
Beispiel (einfache Syntax)
Dieses Beispiel zeigt eine einfache Abfrage, die sich durch "queryType": "simple" und eine gültige Syntax auszeichnet. Obwohl der Abfragetyp unten festgelegt ist, handelt es sich um die Standardeinstellung und er kann weggelassen werden, es sei denn, Sie kehren von einem alternativen Typ zurück. Im folgenden Beispiel handelt es sich um eine Suche über unabhängige Ausdrücke mit der Anforderung, dass alle übereinstimmenden Dokumente "pool" enthalten.
POST https://{{service-name}}.search.windows.net/indexes/hotel-rooms-sample/docs/search?api-version=2026-04-01
{
"queryType": "simple",
"search": "budget hotel +pool",
"searchMode": "all"
}
Der searchMode Parameter ist in diesem Beispiel relevant. Immer wenn boolesche Operatoren in der Abfrage enthalten sind, sollten Sie im Allgemeinen searchMode=all konfigurieren, dass alle Kriterien übereinstimmen. Andernfalls können Sie die Standardeinstellung searchMode=any verwenden, die den Rückruf vor Genauigkeit begünstigt.
Weitere Beispiele finden Sie in den Beispielen für einfache Abfragesyntax. Ausführliche Informationen zu abfrageanforderung und -parametern finden Sie unter Search Documents (REST API).For details about the query request and parameters, see Search Documents (REST API).
Stichwortsuche nach Begriffen und Ausdrücken
An den search Parameter übergebene Zeichenfolgen können Begriffe oder Ausdrücke in jeder unterstützten Sprache, boolesche Operatoren, Vorrangoperatoren, Wildcard- oder Präfixzeichen für "beginnt mit"-Abfragen, Escapezeichen und URL-Codierungszeichen enthalten. Der search Parameter ist optional. Nicht angegeben, Suchvorgänge (search=* oder search=" ") geben die obersten 50 Dokumente in beliebiger (nicht bewerteter) Reihenfolge zurück.
Bei einer Begriffssuche handelt es sich um eine Abfrage eines oder mehrerer Ausdrücke, bei denen eine der Ausdrücke als Übereinstimmung betrachtet wird.
Eine Begriffssuche ist ein exakter Ausdruck, der in Anführungszeichen
" "eingeschlossen ist. Zum Beispiel, währendRoach Motel(ohne Anführungszeichen) nach Dokumenten suchen würde, dieRoachund/oderMotelin beliebiger Reihenfolge überall enthalten, werden"Roach Motel"(mit Anführungszeichen) nur Dokumente finden, die den gesamten Ausdruck in dieser Reihenfolge enthalten (die lexikalische Analyse gilt weiterhin).
Abhängig von Ihrem Suchclient müssen Sie die Anführungszeichen in einer Ausdruckssuche möglicherweise mit Escapezeichen versehen. Beispiel: In einer POST-Anforderung wird eine Ausdruckssuche nach "Roach Motel" im Anforderungstext möglicherweise mit "\"Roach Motel\"" angegeben. Wenn Sie die Azure SDKs verwenden, werden die Anführungszeichen beim Serialisieren des Suchtexts durch den Suchclient mit Escapezeichen versehen. Ihr Suchbegriff kann als "Roach Motel" gesendet werden.
Standardmäßig werden alle im search Parameter übergebenen Zeichenfolgen lexikalisch analysiert. Stellen Sie sicher, dass Sie das Tokenisierungsverhalten des verwendeten Analyzers kennen. Oft, wenn Abfrageergebnisse unerwartet sind, liegt der Grund darin, wie Begriffe zum Zeitpunkt der Abfrage tokenisiert werden. Sie können die Tokenisierung für bestimmte Zeichenfolgen testen , um die Ausgabe zu bestätigen.
Jede Texteingabe mit einem oder mehreren Begriffen gilt als gültiger Ausgangspunkt für die Abfrageausführung. Azure KI-Suche findet Dokumente, die einen oder alle der Begriffe enthalten, einschließlich aller Variationen, die bei der Analyse des Textes gefunden wurden.
So einfach dies klingt, gibt es einen Aspekt der Abfrageausführung in Azure KI-Suche, der könnte unerwartete Ergebnisse erzeugen und die Suchergebnisse erhöhen, anstatt sie zu verringern, da der Eingabezeichenfolge mehr Begriffe und Operatoren hinzugefügt werden. Ob diese Erweiterung tatsächlich auftritt, hängt von der Einbeziehung eines NOT-Operators ab, kombiniert mit einer searchMode Parametereinstellung, die bestimmt, wie NOT in Bezug auf AND oder OR Verhalten interpretiert wird. Weitere Informationen finden Sie im NOT Operator unter booleschen Operatoren.
Boolesche Operatoren
Sie können boolesche Operatoren in eine Abfragezeichenfolge einbetten, um die Genauigkeit einer Übereinstimmung zu verbessern. In der einfachen Syntax sind boolesche Operatoren zeichenbasiert. Textoperatoren, z. B. das Wort AND, werden nicht unterstützt.
| Charakter | Beispiel | Verwendung |
|---|---|---|
+ |
pool + ocean |
Ein AND Vorgang. Legt beispielsweise fest, pool + ocean dass ein Dokument beide Begriffe enthalten muss. |
| |
pool | ocean |
Ein OR Vorgang findet eine Übereinstimmung, wenn entweder der eine oder der andere Begriff gefunden wird. In dem Beispiel gibt das Abfragemodul eine Übereinstimmung für Dokumente zurück, die entweder pool oder ocean oder beide Begriffe enthalten. Da OR der standardmäßige Konjunktionsoperator ist, können Sie ihn auch weglassen, sodass pool ocean dem Äquivalent von pool | ocean entspricht. |
- |
pool – ocean |
Ein NOT-Vorgang gibt Übereinstimmungen für Dokumente zurück, die den Begriff ausschließen. Der searchMode-Parameter in einer Abfrageanforderung steuert, ob ein Begriff mit dem NOT-Operator mit anderen Begriffen in der Abfrage per AND oder OR verknüpft wird (vorausgesetzt, dass es keinen booleschen Operator für die anderen Begriffe gibt). Gültige Werte enthalten any oder all.
searchMode=any erhöht den Rückruf von Abfragen, indem mehr Ergebnisse eingeschlossen werden, und standardmäßig - als "ODER NICHT" interpretiert wird. Beispielsweise entspricht pool - ocean Dokumenten, die entweder den Ausdruck pool enthalten oder solchen, die den Ausdruck ocean nicht enthalten.
searchMode=all erhöht die Genauigkeit von Abfragen durch die Einbeziehung von weniger Ergebnissen, und standardmäßig wird - als "UND NICHT" interpretiert. Bei searchMode=any gleicht die Abfrage pool - ocean beispielsweise Dokumente ab, die den Begriff „Pool“ enthalten, und alle Dokumente, die den Begriff „Ozean“ nicht enthalten. Dies ist wohl ein intuitiveres Verhalten für den - Operator. Daher sollten Sie die Verwendung von searchMode=all anstelle von searchMode=any in Betracht ziehen, wenn Sie Suchen eher auf Genauigkeit als auf Recall optimieren möchten und Ihre Benutzer den --Operator häufig in Suchvorgängen verwenden. Berücksichtigen Sie bei der Entscheidung für eine searchMode Einstellung die Benutzerinteraktionsmuster für Abfragen in verschiedenen Anwendungen. Benutzer, die nach Informationen suchen, sind wahrscheinlicher, dass ein Operator in eine Abfrage einbezogen wird, im Gegensatz zu E-Commerce-Websites, die über integrierte Navigationsstrukturen verfügen. |
Präfixabfragen
Fügen Sie bei „Beginnt mit“-Abfragen einen Suffixoperator (*) als Platzhalter für den Rest eines Begriffs hinzu. Eine Präfixabfrage muss mit mindestens einem Nur-Text-Zeichen beginnen, bevor Sie den Suffixoperator hinzufügen können.
| Charakter | Beispiel | Verwendung |
|---|---|---|
* |
lingui* entspricht „linguistic“ oder „linguini“ |
Das Sternchen (*) stellt ein oder mehrere Zeichen beliebiger Länge dar, wobei die Groß-/Kleinschreibung ignoriert wird. |
Ähnlich wie bei Filtern sucht eine Präfixabfrage nach einer genauen Übereinstimmung. Daher gibt es keine Relevanzbewertung (alle Ergebnisse erhalten eine Suchbewertung von 1,0). Beachten Sie, dass Präfixabfragen langsam sein können, insbesondere, wenn der Index groß ist und das Präfix aus einer kleinen Anzahl von Zeichen besteht. Eine alternative Methodik, z. B. edge-n-Gram-Tokenisierung, kann schneller ausgeführt werden. Ausdrücke, die die Präfixsuche verwenden, dürfen maximal 1000 Zeichen lang sein.
Einfache Syntax unterstützt nur Präfixabgleich. Verwenden Sie bei Suffix- oder Infixabgleichen mit dem Ende oder der Mitte eines Begriffs die vollständige Lucene-Syntax für die Platzhaltersuche.
Escaping-Suchoperatoren
In der einfachen Syntax enthalten Suchoperatoren die folgenden Zeichen: + | " ( ) ' \
Wenn eines dieser Zeichen Teil eines Tokens im Index ist, versehen Sie es mit einem einzelnen umgekehrten Schrägstrich (\) als Escapezeichen in der Abfrage. Angenommen, Sie haben einen benutzerdefinierten Analyzer für die tokenisierung ganzer Begriffe verwendet, und Ihr Index enthält die Zeichenfolge "Luxury+Hotel". Um eine genaue Übereinstimmung für dieses Token zu erhalten, fügen Sie ein Escapezeichen ein: search=luxury\+hotel.
Um die Dinge für die typischeren Fälle einfach zu machen, gibt es zwei Ausnahmen für diese Regel, bei der die Flucht nicht erforderlich ist:
Der NOT-Operator
-muss nur dann mit einem Escapezeichen versehen werden, wenn es sich um das erste Zeichen nach einem Leerzeichen handelt. Wenn das-in der Mitte auftritt (z. B. in3352CDD0-EF30-4A2E-A512-3B30AF40F3FD), können Sie das Escapezeichen auslassen.Der Suffix-Operator
*muss nur dann mit einem Escapezeichen versehen werden, wenn es sich um das letzte Zeichen vor einem Leerzeichen handelt. Wenn das*in der Mitte auftritt (z. B. in4*4=16), ist kein Escapezeichen erforderlich.
Hinweis
Die Lucene-Standardanalyse löscht bei der lexikalischen Analyse standardmäßig Bindestriche, Leerzeichen, kaufmännische Und-Zeichen und andere Zeichen in Wörtern und teilt die Wörter an diesen Stellen auf. Wenn Sie sonderzeichen in der Abfragezeichenfolge beibehalten müssen, benötigen Sie möglicherweise einen Analyzer, der sie im Index behält. Einige Optionen umfassen den Microsoft-Sprachanalysator, der Bindestrichwörter beibehält, oder einen benutzerdefinierten Analysator für komplexere Muster. Weitere Informationen finden Sie unter Teilbegriffe, Muster und Sonderzeichen.
Codieren unsicherer und reservierter Zeichen in URLs
Stellen Sie sicher, dass alle unsicheren und reservierten Zeichen in einer URL codiert sind. Beispielsweise ist "#" ein unsicheres Zeichen, da es sich um einen Fragment-/Ankerbezeichner in einer URL handelt. Das Zeichen muss codiert %23 werden, wenn es in einer URL verwendet wird. '& ' und '=' sind Beispiele für reservierte Zeichen, während sie Parameter trennen und Werte in Azure KI-Suche angeben. Weitere Informationen finden Sie unter RFC1738: Uniform Resource Locators (URL).
Unsichere Zeichen sind " ` < > # % { } | \ ^ ~ [ ]. Reservierte Zeichen sind ; / ? : @ = + &.
Sonderzeichen
Sonderzeichen können von Währungssymbolen wie "$" oder "€" bis zu Emojis reichen. Viele Analyzer, einschließlich der Standard-Standardanalyse, schließen Sonderzeichen während der Indizierung aus, was bedeutet, dass sie nicht in Ihrem Index dargestellt werden.
Wenn Sie eine spezielle Zeichendarstellung benötigen, können Sie ein Analysetool zuweisen, das diese beibehält:
Der Whitespace Analyzer betrachtet jede Zeichensequenz, die durch Leerzeichen getrennt ist, als Token (sodass das Emoji "❤" als Token betrachtet wird).
Ein Sprachanalysator, z. B. der Microsoft-Englisch-Analysator (
en.microsoft), würde die Zeichenfolge "$" oder "€" als Token verwenden.
Zur Bestätigung können Sie einen Analyzer testen , um zu sehen, welche Token für eine bestimmte Zeichenfolge generiert werden. Wie Sie erwarten, erhalten Sie möglicherweise keine vollständige Tokenisierung von einem einzigen Analyzer. Eine Problemumgehung besteht darin, mehrere Felder zu erstellen, die denselben Inhalt enthalten, jedoch mit unterschiedlichen Analyser-Zuweisungen (z. B. description_en, description_fr und so weiter für Sprach-Analyser).
Wenn Sie Unicode-Zeichen verwenden, stellen Sie sicher, dass die Symbole in der Abfrage-URL ordnungsgemäß mit Escapezeichen versehen werden (z. B. muss für ❤ die Escapesequenz %E2%9D%A4+ verwendet werden). Einige Webclients führen diese Übersetzung automatisch aus.
Rangfolge (Gruppierung)
Sie können Klammern verwenden, um Unterabfragen zu erstellen, einschließlich der Verwendung von Operatoren innerhalb des Klammerausdrucks. Sucht z. B. nach Dokumenten, motel+(wifi|luxury) die den Begriff "Motel" und entweder "WIFI" oder "Luxus" (oder beides) enthalten.
Grenzwerte für die Abfragegröße
Wenn Ihre Anwendung Suchabfragen programmgesteuert generiert, empfehlen wir, sie so zu entwerfen, dass keine Abfragen mit ungebundener Größe generiert werden.
Für GET darf die Länge der URL 8 KB nicht überschreiten.
Für POST (und alle anderen Anforderungen), bei denen der Textkörper der Anforderung
searchund andere Parameter wiefilterundorderbyenthält, beträgt die maximale Größe 16 MB. Zu den zusätzlichen Grenzwerten gehören:- Die maximale Länge der Suchklausel beträgt 100.000 Zeichen.
- Die maximale Anzahl von Klauseln in
search(ausdrücke getrennt durch AND oder OR) ist 1024. - Die maximale Suchbegriffgröße beträgt 1000 Zeichen für die Präfixsuche.
- Es gibt auch eine Beschränkung von ca. 32 KB für die Größe eines einzelnen Ausdrucks in einer Abfrage.
Weitere Informationen zu Abfragegrenzwerten finden Sie unter API-Anforderungsgrenzwerte.
Nächste Schritte
Wenn Sie Abfragen programmgesteuert erstellen, überprüfen Sie Full-Textsuche in Azure KI-Suche, um die Phasen der Abfrageverarbeitung und die Auswirkungen der Textanalyse zu verstehen.
Sie können auch die folgenden Artikel lesen, um mehr über die Abfrageerstellung zu erfahren: