Einfache Abfragesyntax in Azure SearchSimple query syntax in Azure Search

Azure Search implementiert zwei Lucene-basierte Abfragesprachen: Einfacher Abfrageparser und der Lucene-Abfrageparser.Azure Search implements two Lucene-based query languages: Simple Query Parser and the Lucene Query Parser. In Azure Search schließt die einfache Abfragesyntax die Fuzzy-/Slop-Optionen aus.In Azure Search, the simple query syntax excludes the fuzzy/slop options.

Hinweis

Für komplexere Abfragen bietet Azure Search eine alternative Lucene-Abfragesyntax.Azure Search provides an alternative Lucene Query Syntax for more complex queries. Weitere Informationen über die Abfrageanalysearchitektur und die Vorteile der einzelnen Syntaxen finden Sie unter Textsuche Funktionsweise der Volltextsuche in Azure Search.To learn more about query parsing architecture and benefits of each syntax, see How full text search works in Azure Search.

Aufrufen der einfachen AnalyseHow to invoke simple parsing

Die einfache Syntax ist die Standardeinstellung.Simple syntax is the default. Der Aufruf ist nur notwendig, wenn Sie die Syntax von vollständig auf einfach zurücksetzen.Invocation is only necessary if you are resetting the syntax from full to simple. Um die Syntax explizit festzulegen, verwenden Sie den queryType-Suchparameter.To explicitly set the syntax, use the queryType search parameter. Gültige Werte sind simple|full, mit simple als Standard und full für Lucene.Valid values include simple|full, with simple as the default, and full for Lucene.

Anomalien beim AbfrageverhaltenQuery behavior anomalies

Jeder Text mit einem oder mehreren Begriffen gilt als gültiger Ausgangspunkt für die Ausführung der Abfrage.Any text with one or more terms is considered a valid starting point for query execution. Azure Search findet Dokumente, die einen oder alle der Begriffe enthalten, einschließlich aller Variationen, die bei der Analyse des Textes gefunden wurden.Azure Search will match documents containing any or all of the terms, including any variations found during analysis of the text.

So einfach das klingt, es gibt einen Aspekt der Abfrageausführung in der Azure Search, der möglicherweise unerwartete Ergebnisse liefert, die die Suchergebnisse eher erhöhen als verringern, da mehr Begriffe und Operatoren zur Eingabezeichenkette hinzugefügt werden.As straightforward as this sounds, there is one aspect of query execution in Azure Search that might produce unexpected results, increasing rather than decreasing search results as more terms and operators are added to the input string. Ob diese Erweiterung tatsächlich stattfindet, hängt von der Einbeziehung eines NOT-Operators ab, kombiniert mit einer searchMode-Parametereinstellung, die bestimmt, wie NOT in Form von AND- oder OR-Verhalten interpretiert wird.Whether this expansion actually occurs depends on the inclusion of a NOT operator, combined with a searchMode parameter setting that determines how NOT is interpreted in terms of AND or OR behaviors. Mit dem Standard, searchMode=Any- und einem NOT-Operator wird die Operation als OR-Aktion berechnet, sodass "New York" NOT Seattle alle Städte zurückgibt, die nicht Seattle sind.Given the default, searchMode=Any, and a NOT operator, the operation is computed as an OR action, such that "New York" NOT Seattle returns all cities that are not Seattle.

Typischerweise ist es wahrscheinlicher, dass Sie dieses Verhalten in Benutzerinteraktionsmustern für Anwendungen sehen, die über Inhalte suchen, bei denen Benutzer eher einen Operator in eine Abfrage einbeziehen, als E-Commerce-Websites, die über mehr integrierte Navigationsstrukturen verfügen.Typically, you're more likely to see these behaviors in user interaction patterns for applications that search over content, where users are more likely to include an operator in a query, as opposed to e-commerce sites that have more built-in navigation structures. Weitere Informationen finden Sie unter NOT-Operator.For more information, see NOT operator.

Boolesche Operatoren (AND, OR, NOT)Boolean operators (AND, OR, NOT)

Sie können Operatoren in eine Abfragezeichenfolge einbetten, um einen umfangreichen Satz von Kriterien zu erstellen, anhand derer passende Dokumente gefunden werden.You can embed operators in a query string to build a rich set of criteria against which matching documents are found.

AND-Operator +AND operator +

Der AND-Operator ist ein Pluszeichen (+).The AND operator is a plus sign. Zum Beispiel sucht wifi+luxury nach Dokumenten, die sowohl wifi als auch luxury enthalten.For example, wifi+luxury will search for documents containing both wifi and luxury.

OR-Operator|OR operator |

Der OR-Operator ist ein vertikaler Balken oder ein senkrechter Strich.The OR operator is a vertical bar or pipe character. Zum Beispiel sucht wifi | luxury nach Dokumenten, die entweder wifioder luxury oder beides enthalten.For example, wifi | luxury will search for documents containing either wifi or luxury or both.

NOT-Operator -NOT operator -

Der NOT-Operator ist ein Minuszeichen (-).The NOT operator is a minus sign. Beispielsweise sucht wifi –luxury nach Dokumenten, die den Begriff wifi enthalten und/oder luxury nicht enthalten (und/oder von searchMode gesteuert werden).For example, wifi –luxury will search for documents that have the wifi term and/or do not have luxury (and/or is controlled by searchMode).

Hinweis

Die Option searchMode steuert, ob ein Begriff mit dem NOT-Operator in Abwesenheit eines +- oder |-Operators mit den anderen Begriffen in der Abfrage als AND oder OR betrachtet wird.The searchMode option controls whether a term with the NOT operator is ANDed or ORed with the other terms in the query in the absence of a + or | operator. Zur Erinnerung: searchMode kann entweder auf any (Standard) oder all festgelegt werden.Recall that searchMode can be set to either any (default) or all. Wenn Sie any verwenden, erhöht dies den Abruf von Abfragen, indem es mehr Ergebnisse einbezieht, und standardmäßig wird - als „OR NOT“ interpretiert.If you use any, it will increase the recall of queries by including more results, and by default - will be interpreted as "OR NOT". So stimmt beispielsweise wifi -luxury mit Dokumenten überein, die entweder den Begriff wifi enthalten oder die den Begriff luxury nicht enthalten.For example, wifi -luxury will match documents that either contain the term wifi or those that do not contain the term luxury. Wenn Sie all verwenden, erhöht dies die Genauigkeit der Abfragen, indem es weniger Ergebnisse einbezieht, und wird standardmäßig als „AND NOT“ interpretiert.If you use all, it will increase the precision of queries by including fewer results, and by default - will be interpreted as "AND NOT". So stimmt beispielsweise wifi -luxury mit Dokumenten überein, die den Begriff wifi enthalten und die nicht den Begriff „Luxus“ enthalten.For example, wifi -luxury will match documents that contain the term wifi and do not contain the term "luxury". Dies ist wohl ein intuitiveres Verhalten für den --Operator.This is arguably a more intuitive behavior for the - operator. Daher sollten Sie die Verwendung von searchMode=all anstelle von searchMode=any in Betracht ziehen, wenn Sie die Suche hinsichtlich der Genauigkeit statt des Rückrufs optimieren möchten, und Ihre Benutzer häufig den --Operator bei der Suche verwenden.Therefore, you should consider using searchMode=all instead of searchMode=any if You want to optimize searches for precision instead of recall, and Your users frequently use the - operator in searches.

SuffixoperatorSuffix operator

Der Suffixoperator ist ein Sternchen *.The suffix operator is an asterisk *. Beispielsweise sucht lux* nach Dokumenten, die einen Begriff haben, der mit lux beginnt, wobei Groß-/Kleinschreibung ignoriert wird.For example, lux* will search for documents that have a term that starts with lux, ignoring case.

Phrase-SuchoperatorPhrase search operator

Der phrase-Operator schließt einen Ausdruck in Anführungszeichen " " ein.The phrase operator encloses a phrase in quotation marks " ". Zum Beispiel: Roach Motel (ohne Anführungszeichen) würde nach Dokumenten suchen, die Roach und/oder Motel enthalten, und zwar überall in beliebiger Reihenfolge, "Roach Motel" (mit Anführungszeichen) stimmt nur mit Dokumenten überein, die den gesamten Ausdruck zusammen und in dieser Reihenfolge enthalten (die Textanalyse gilt weiterhin).For example, while Roach Motel (without quotes) would search for documents containing Roach and/or Motel anywhere in any order, "Roach Motel" (with quotes) will only match documents that contain that whole phrase together and in that order (text analysis still applies).

Precedence-OperatorPrecedence operator

Der precedence-Operator schließt die Zeichenfolge in Klammern ( ) ein.The precedence operator encloses the string in parentheses ( ). Zum Beispiel sucht motel+(wifi | luxury) nach Dokumenten, die den Begriff „Motel“ und entweder wifi oder luxury (oder beides) enthalten.For example, motel+(wifi | luxury) will search for documents containing the motel term and either wifi or luxury (or both).

Escaping-SuchoperatorenEscaping search operators

Um die obigen Symbole als eigentlichen Teil des Suchtextes zu verwenden, sollten sie durch Voranstellen eines umgekehrten Schrägstrichs escaped werden.In order to use the above symbols as actual part of the search text, they should be escaped by prefixing them with a backslash. Beispielsweise führt luxury\+hotel zum Begriff luxury+hotel.For example, luxury\+hotel will result in the term luxury+hotel. Um es für die typischeren Fälle einfach zu machen, gibt es zwei Ausnahmen von dieser Regel, bei denen ein Escape nicht erforderlich ist:In order to make things simple for the more typical cases, there are two exceptions to this rule where escaping is not needed:

  • Der NOT-Operator - muss nur dann escaped werden, wenn es sich um das erste Zeichen nach Leerzeichen handelt, nicht, wenn es sich um die Mitte eines Begriffs handelt.The NOT operator - only needs to be escaped if it's the first character after whitespace, not if it's in the middle of a term. Beispielsweise ist wi-fi ein einzelner Begriff, während GUIDs (z.B. 3352CDD0-EF30-4A2E-A512-3B30AF40F3FD) wie ein einzelner Token behandelt werden.For example, wi-fi is a single term; whereas GUIDs (such as 3352CDD0-EF30-4A2E-A512-3B30AF40F3FD) are treated as a single token.
  • Der Suffix-Operator * muss nur dann escaped werden, wenn es sich um das letzte Zeichen vor dem Leerzeichen handelt, nicht, wenn es sich um die Mitte eines Begriffs handelt.The suffix operator * needs to be escaped only if it's the last character before whitespace, not if it's in the middle of a term. Beispielsweise wird wi*fi als ein einzelnes Token behandelt.For example, wi*fi is treated as a single token.

Hinweis

Obwohl ein Escapen Token zusammenhält, kann die Textanalyse sie je nach Analysenmodus aufteilen.Although escaping keeps tokens together, text analysis may split them up, depending on the analysis mode. Weitere Informationen finden Sie unter Sprachunterstützung (REST-API für Azure Search-Dienst).See Language support (Azure Search Service REST API) for details.

Weitere InformationenSee also