Lucene-Abfragesyntax in Azure Cognitive SearchLucene query syntax in Azure Cognitive Search

Sie können für Azure Cognitive Search basierend auf der umfassenden Syntax des Lucene-Abfrageparsers spezielle Abfragen schreiben: Platzhaltersuche, Fuzzysuche, NEAR-Suche und Suche mit regulären Ausdrücken sind einige Beispiele hierfür.You can write queries against Azure Cognitive Search based on the rich Lucene Query Parser syntax for specialized query forms: wildcard, fuzzy search, proximity search, regular expressions are a few examples. Der Großteil der Syntax des Lucene-Abfrageparsers wird in Azure Cognitive Search unverändert implementiert. Die einzige Ausnahme sind Bereichssuchen, die in Azure Cognitive Search mit $filter-Ausdrücken erstellt werden.Much of the Lucene Query Parser syntax is implemented intact in Azure Cognitive Search, with the exception of range searches which are constructed in Azure Cognitive Search through $filter expressions.

Hinweis

Die vollständige Lucene-Syntax wird für Abfrageausdrücke verwendet, die im search-Parameter der Dokumente durchsuchen-API übergeben werden. Sie sollte nicht mit der OData-Syntax verwechselt werden, die für den $filter-Parameter dieser API verwendet wird.The full Lucene syntax is used for query expressions passed in the search parameter of the Search Documents API, not to be confused with the OData syntax used for the $filter parameter of that API. Für diese unterschiedlichen Syntaxen gelten eigene Regeln für das Erstellen von Abfragen, das Auskommentieren von Zeichenfolgen usw.These different syntaxes have their own rules for constructing queries, escaping strings, and so on.

Aufrufen der vollständigen AnalyseInvoke full parsing

Legen Sie den Suchparameter queryType fest, um den gewünschten Parser anzugeben.Set the queryType search parameter to specify which parser to use. Gültige Werte sind simple|full (der Standardwert ist simple) und full für Lucene.Valid values include simple|full, with simple as the default, and full for Lucene.

Beispiel für die vollständige SyntaxExample showing full syntax

Im folgenden Beispiel wird mithilfe der Lucene-Abfragesyntax (dies wird im Parameter queryType=full deutlich) eine Suche nach Dokumenten im Index durchgeführt.The following example finds documents in the index using the Lucene query syntax, evident in the queryType=full parameter. Bei dieser Abfrage werden Hotels zurückgegeben, bei denen das Kategoriefeld den Begriff „budget“ enthält und alle durchsuchbaren Felder die Wörter „recently renovated“ enthalten.This query returns hotels where the category field contains the term "budget" and all searchable fields containing the phrase "recently renovated". Dokumenten mit dem Ausdruck „recently renovated“ wird aufgrund des Werts für die Begriffsverstärkung (3) ein höherer Rang zugewiesen.Documents containing the phrase "recently renovated" are ranked higher as a result of the term boost value (3).

Der Parameter searchMode=all ist in diesem Beispiel wichtig.The searchMode=all parameter is relevant in this example. Bei Abfragen mit Operatoren sollten Sie generell searchMode=all festlegen, um sicherzustellen, dass alle Kriterien abgeglichen werden.Whenever operators are on the query, you should generally set searchMode=all to ensure that all of the criteria is matched.

GET /indexes/hotels/docs?search=category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2020-06-30&querytype=full

Alternativ können Sie POST verwenden:Alternatively, use POST:

POST /indexes/hotels/docs/search?api-version=2020-06-30
{
  "search": "category:budget AND \"recently renovated\"^3",
  "queryType": "full",
  "searchMode": "all"
}

Weitere Beispiele finden Sie unter Beispiele für die Lucene-Abfragesyntax zum Erstellen von Abfragen in Azure Cognitive Search.For additional examples, see Lucene query syntax examples for building queries in Azure Cognitive Search. Ausführliche Informationen zur Angabe sämtlicher Abfrageparameter finden Sie unter Durchsuchen von Dokumenten (REST-API für Azure Cognitive Search).For details about specifying the full contingent of query parameters, see Search Documents (Azure Cognitive Search REST API).

Hinweis

Azure Cognitive Search unterstützt darüber hinaus die einfache Abfragesyntax, eine unkomplizierte und stabile Abfragesprache, die für die einfache Schlüsselwortsuche verwendet werden kann.Azure Cognitive Search also supports Simple Query Syntax, a simple and robust query language that can be used for straightforward keyword search.

Grundlagen der SyntaxSyntax fundamentals

Die folgenden Syntaxgrundlagen gelten für alle Abfragen mit der Lucene-Syntax.the following syntax fundamentals apply to all queries that use the Lucene syntax.

Operatorauswertung im KontextOperator evaluation in context

Die Platzierung bestimmt, ob ein Symbol als Operator oder einfach als ein weiteres Zeichen in einer Zeichenfolge interpretiert wird.Placement determines whether a symbol is interpreted as an operator or just another character in a string.

In der vollständigen Lucene-Syntax wird das Tildezeichen (~) beispielsweise sowohl für die Fuzzysuche als auch die NEAR-Suche verwendet.For example, in Lucene full syntax, the tilde (~) is used for both fuzzy search and proximity search. Wenn das Tildezeichen (~) nach einem Ausdruck in Anführungszeichen steht, ruft es die NEAR-Suche auf.When placed after a quoted phrase, ~ invokes proximity search. Steht es am Ende eines Begriffs, ruft es die Fuzzysuche auf.When placed at the end of a term, ~ invokes fuzzy search.

In einem Begriff (z. B. „Business~Analyst“) wird das Zeichen nicht als Operator interpretiert.Within a term, such as "business~analyst", the character is not evaluated as an operator. Sofern es sich um eine Begriffs- oder Ausdrucksabfrage handelt, wird in diesem Fall bei der Volltextsuche mit lexikalischer Analyse das „~“ entfernt, und der Begriff „Business~Analyst“ wird in zwei Begriffe aufgeteilt: „Business“ ODER „Analyst“.In this case, assuming the query is a term or phrase query, full text search with lexical analysis strips out the ~ and breaks the term "business~analyst" in two: business OR analyst.

Im obigen Beispiel geht es um das Tildezeichen (~), das gleiche Prinzip gilt jedoch für alle Operatoren.The example above is the tilde (~), but the same principle applies to every operator.

Verwenden von Escapezeichen für SonderzeichenEscaping special characters

Wenn Sie einen der Suchoperatoren in Suchtext einbeziehen möchten, machen Sie ihn zu einem Escapezeichen, indem Sie davor einen einzelnen umgekehrten Schrägstrich (\) setzen.In order to use any of the search operators as part of the search text, escape the character by prefixing it with a single backslash (\). So würden Sie beispielsweise für eine Platzhaltersuche nach https://, in der :// ein Teil der Abfragezeichenfolge ist, search=https\:\/\/* angeben.For example, for a wildcard search on https://, where :// is part of the query string, you would specify search=https\:\/\/*. Entsprechend könnte ein Telefonnummernmuster mit Escapezeichen so aussehen: \+1 \(800\) 642\-7676.Similarly, an escaped phone number pattern might look like this \+1 \(800\) 642\-7676.

Zu den Sonderzeichen, die Escapezeichen erfordern, gehören die folgenden:Special characters that require escaping include the following:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

Hinweis

Obwohl Token durch die Verwendung von Escapezeichen zusammengehalten werden, können sie durch eine lexikalische Analyse während der Indizierung eventuell entfernt werden. Die Lucene-Standardanalyse teilt z. B. Wörter an Bindestrichen, Leerzeichen und anderen Zeichen auf.Although escaping keeps tokens together, lexical analysis during indexing may strip them out. For example, the standard Lucene analyzer will break words on hyphens, whitespace, and other characters. Wenn in der Abfragezeichenfolge Sonderzeichen erforderlich sind, benötigen Sie möglicherweise ein Analysetool, das sie im Index beibehält.If you require special characters in the query string, you might need an analyzer that preserves them in the index. Zu den Optionen gehören Microsoft Natural Language Analyzer (Analysetool für natürliche Sprache), bei dem Wörter mit Bindestrichen beibehalten werden, oder ein benutzerdefiniertes Analysetool für komplexere Muster.Some choices include Microsoft natural language analyzers, which preserves hyphenated words, or a custom analyzer for more complex patterns. Weitere Informationen finden Sie unter Teilausdrücke, Muster und Sonderzeichen.For more information, see Partial terms, patterns, and special characters.

Codierung von unsicheren und reservierten Zeichen in URLsEncoding unsafe and reserved characters in URLs

Stellen Sie sicher, dass alle unsicheren und reservierten Zeichen in einer URL codiert werden.Please ensure all unsafe and reserved characters are encoded in a URL. „#“ ist beispielsweise ein Fragment-/Ankerbezeichner in einer URL und deshalb ein unsicheres Zeichen.For example, '#' is an unsafe character because it is a fragment/anchor identifier in a URL. Bei der Verwendung in einer URL muss das Zeichen in %23 codiert werden.The character must be encoded to %23 if used in a URL. „&“ und „=“ sind Beispiele für reservierte Zeichen, da sie in Azure Cognitive Search zum Trennen von Parametern und Angeben von Werten dienen.'&' and '=' are examples of reserved characters as they delimit parameters and specify values in Azure Cognitive Search. Weitere Informationen finden Sie unter RFC1738: Uniform Resource Locator (URL).Please see RFC1738: Uniform Resource Locators (URL) for more details.

Unsichere Zeichen sind " ` < > # % { } | \ ^ ~ [ ].Unsafe characters are " ` < > # % { } | \ ^ ~ [ ]. Reservierte Zeichen sind ; / ? : @ = + &.Reserved characters are ; / ? : @ = + &.

AbfragegrößenlimitsQuery size limits

Die Größe der Abfragen, die Sie an Azure Cognitive Search senden können, ist begrenzt.There is a limit to the size of queries that you can send to Azure Cognitive Search. Insbesondere können Sie maximal 1.024 Klauseln (durch AND, OR usw. getrennte Ausdrücke) verwenden.Specifically, you can have at most 1024 clauses (expressions separated by AND, OR, and so on). Für die Größe der einzelnen Begriffe in einer Abfrage gilt zudem ein Grenzwert von ungefähr 32 KB.There is also a limit of approximately 32 KB on the size of any individual term in a query. Wenn Ihre Anwendung programmgesteuert Suchabfragen generiert, sollten Sie durch den Anwendungsentwurf sicherstellen, dass sie keine Abfragen unbegrenzter Größe erzeugt.If your application generates search queries programmatically, we recommend designing it in such a way that it does not generate queries of unbounded size.

Rangfolgenoperatoren (Gruppierung)Precedence operators (grouping)

Sie können mithilfe von Klammern Unterabfragen erstellen, die Operatoren innerhalb der Anweisung in Klammern enthalten.You can use parentheses to create subqueries, including operators within the parenthetical statement. Beispielsweise 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).

Die Feldgruppierung funktioniert ähnlich, beschränkt die Gruppierung jedoch auf ein einzelnes Feld.Field grouping is similar but scopes the grouping to a single field. Beispielsweise durchsucht hotelAmenities:(gym+(wifi||pool)) das Feld „hotelAmenities“ nach „gym“ und „wifi“ oder nach „gym“ und „pool“.For example, hotelAmenities:(gym+(wifi||pool)) searches the field "hotelAmenities" for "gym" and "wifi", or "gym" and "pool".

Geben Sie boolesche Operatoren in Textform (AND, OR, NOT) immer in Großbuchstaben an.Always specify text boolean operators (AND, OR, NOT) in all caps.

OR-Operator OR oder ||OR operator OR or ||

Der OR-Operator ist ein vertikaler Balken bzw. ein senkrechter Strich.The OR operator is a vertical bar or pipe character. Beispiel: wifi || luxury sucht nach Dokumenten, die „wifi“ oder „luxury“ oder beides enthalten.For example: wifi || luxury will search for documents containing either "wifi" or "luxury" or both. Da OR der standardmäßige Konjunktionsoperator ist, könnten Sie ihn auch weglassen, d. h. wifi luxury entspricht wifi || luxury.Because OR is the default conjunction operator, you could also leave it out, such that wifi luxury is the equivalent of wifi || luxury.

AND-Operator AND, && oder +AND operator AND, && or +

Der AND-Operator ist ein kaufmännisches Und-Zeichen oder ein Pluszeichen.The AND operator is an ampersand or a plus sign. Beispiel: wifi && luxury sucht nach Dokumenten, die sowohl „wifi“ als auch „luxury“ enthalten.For example: wifi && luxury will search for documents containing both "wifi" and "luxury". Das Pluszeichen (+) wird für erforderliche Begriffe verwendet.The plus character (+) is used for required terms. Beispielsweise legt +wifi +luxury fest, dass beide Begriffe im Feld eines einzelnen Dokuments vorkommen müssen.For example, +wifi +luxury stipulates that both terms must appear somewhere in the field of a single document.

NOT-Operator NOT, ! oder -NOT operator NOT, ! or -

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

Der Parameter searchMode 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 Operator „+“ oder „|“ für die anderen Begriffe gibt).The searchMode parameter on a query request controls whether a term with the NOT operator is ANDed or ORed with other terms in the query (assuming there is no + or | operator on the other terms). Gültige Werte sind any oder all.Valid values include any or all.

searchMode=any erhöht die Trefferquote von Abfragen, weil mehr Ergebnisse einbezogen werden, und - wird standardmäßig als „OR NOT“ interpretiert.searchMode=any increases 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.

searchMode=all erhöht die Genauigkeit von Abfragen, weil weniger Ergebnisse einbezogen werden und „-“ standardmäßig als „AND NOT“ interpretiert wird.searchMode=all increases 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 statt searchMode=any in Betracht ziehen, wenn Sie Suchen im Hinblick auf die Genauigkeit statt auf die Trefferquote optimieren möchten und Ihre Benutzer den --Operator häufig bei Suchen 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.

Berücksichtigen Sie bei der Entscheidung über eine searchMode-Einstellung die Benutzerinteraktionsmuster für Abfragen in verschiedenen Anwendungen.When deciding on a searchMode setting, consider the user interaction patterns for queries in various applications. Benutzer, die nach Informationen suchen, beziehen eher einen Operator in eine Abfrage mit ein – im Gegensatz zu e-Commerce-Websites mit mehr integrierten Navigationsstrukturen.Users who are searching for information are more likely to include an operator in a query, as opposed to e-commerce sites that have more built-in navigation structures.

Sie können einen feldbezogenen Suchvorgang mit der fieldName:searchExpression-Syntax definieren, wobei es sich bei dem Suchausdruck um ein einzelnes Wort, einen einfachen Ausdruck oder einen komplexeren Ausdruck in Klammern handeln kann, optional mit booleschen Operatoren.You can define a fielded search operation with the fieldName:searchExpression syntax, where the search expression can be a single word or a phrase, or a more complex expression in parentheses, optionally with Boolean operators. Einige Beispiele für Änderungen sind in der folgenden Liste aufgeführt:Some examples include the following:

  • genre:jazz NOT historygenre:jazz NOT history

  • artists:("Miles Davis" "John Coltrane")artists:("Miles Davis" "John Coltrane")

Achten Sie darauf, dass Sie mehrere Zeichenfolgen in Anführungszeichen setzen, wenn beide Zeichenfolgen als einzelne Entität ausgewertet werden sollen (in diesem Fall die Suche nach zwei verschiedenen Künstlern im Feld artists).Be sure to put multiple strings within quotation marks if you want both strings to be evaluated as a single entity, in this case searching for two distinct artists in the artists field.

Das in fieldName:searchExpression angegebene Feld muss ein Feld vom Typ searchable sein.The field specified in fieldName:searchExpression must be a searchable field. Einzelheiten zur Verwendung von Indexattributen in Felddefinitionen finden Sie unter Create Index (Erstellen eines Index).See Create Index for details on how index attributes are used in field definitions.

Hinweis

Bei der Verwendung von feldbezogenen Suchausdrücken brauchen Sie den Parameter searchFields nicht zu verwenden, da in jedem feldbezogenen Suchausdruck explizit ein Feldname angegeben ist.When using fielded search expressions, you do not need to use the searchFields parameter because each fielded search expression has a field name explicitly specified. Allerdings können Sie den Parameter searchFields trotzdem verwenden, wenn Sie eine Abfrage ausführen möchten, bei der einige Teile auf ein bestimmtes Feld beschränkt sind, der Rest sich jedoch auf mehrere Felder beziehen kann.However, you can still use the searchFields parameter if you want to run a query where some parts are scoped to a specific field, and the rest could apply to several fields. Zum Beispiel würde jazz in der Abfrage search=genre:jazz NOT history&searchFields=description nur mit dem Feld genre, und NOT history mit dem Feld description abgeglichen werden.For example, the query search=genre:jazz NOT history&searchFields=description would match jazz only to the genre field, while it would match NOT history with the description field. Der in fieldName:searchExpression angegebene Feldname hat immer Vorrang vor dem Parameter searchFields, weshalb genre in diesem Beispiel nicht in den Parameter searchFields aufgenommen werden muss.The field name provided in fieldName:searchExpression always takes precedence over the searchFields parameter, which is why in this example, we do not need to include genre in the searchFields parameter.

Bei einer Fuzzysuche werden Übereinstimmungen mit einer ähnlichen Konstruktion gefunden, wobei ein Begriff bis zu maximal 50 Begriffen erweitert wird, die die Abstandskriterien von zwei oder weniger erfüllen.A fuzzy search finds matches in terms that have a similar construction, expanding a term up to the maximum of 50 terms that meet the distance criteria of two or less. Weitere Informationen finden Sie unter Fuzzysuche.For more information, see Fuzzy search.

Verwenden Sie für eine Fuzzysuche das Tildezeichen „~“ am Ende eines einzelnen Worts mit einem optionalen Parameter, einer Zahl zwischen 0 und 2 (Standardwert), der die Edit-Distanz angibt.To do a fuzzy search, use the tilde "~" symbol at the end of a single word with an optional parameter, a number between 0 and 2 (default), that specifies the edit distance. Beispielsweise würden bei „blue~“ oder „blue~1“ die Werte „blue“, „blues“ und „glue“ zurückgegeben.For example, "blue~" or "blue~1" would return "blue", "blues", and "glue".

Die Fuzzysuche kann nur auf Begriffe, nicht auf Ausdrücke, angewendet werden. Sie können aber die Tilde an jeden Begriff in einem mehrteiligen Namen oder Ausdruck einzeln anfügen.Fuzzy search can only be applied to terms, not phrases, but you can append the tilde to each term individually in a multi-part name or phrase. So würde beispielsweise „Unviersty~ of~ „Wshington~“ mit „University of Washington“ übereinstimmen.For example, "Unviersty~ of~ "Wshington~" would match on "University of Washington".

NEAR-Suchen werden verwendet, um Begriffe zu suchen, die in einem Dokument nahe beieinander liegen.Proximity searches are used to find terms that are near each other in a document. Fügen Sie ein Tildesymbol „~“ Symbol am Ende eines Ausdrucks ein, gefolgt von der Anzahl der Wörter, die den NEAR-Bereich bilden.Insert a tilde "~" symbol at the end of a phrase followed by the number of words that create the proximity boundary. Beispielsweise finden Sie mit der Abfrage "hotel airport"~5 die Begriffe „hotel“ und „airport“, wenn sie in einem Abstand von fünf Wörtern voneinander in einem Dokument vorkommen.For example, "hotel airport"~5 will find the terms "hotel" and "airport" within 5 words of each other in a document.

BegriffsverstärkungTerm boosting

Die Begriffsverstärkung (Term Boosting) bezieht sich auf das Höherbewerten eines Dokuments, wenn es den verstärkten Begriff enthält, im Verhältnis zu Dokumenten, die den Begriff nicht enthalten.Term boosting refers to ranking a document higher if it contains the boosted term, relative to documents that do not contain the term. Dies unterscheidet sich insofern von Bewertungsprofilen, als dass bei Bewertungsprofilen bestimmte Felder statt bestimmter Begriffe verstärkt werden.This differs from scoring profiles in that scoring profiles boost certain fields, rather than specific terms.

Im folgenden Beispiel werden die Unterschiede veranschaulicht.The following example helps illustrate the differences. Angenommen, Sie haben ein Bewertungsprofil, das Übereinstimmungen in einem bestimmten Feld verstärkt, beispielsweise genre im musicstoreindex-Beispiel.Suppose that there's a scoring profile that boosts matches in a certain field, say genre in the musicstoreindex example. Mit der Begriffsverstärkung könnten Sie bestimmte Suchbegriffe noch höher bewerten als andere.Term boosting could be used to further boost certain search terms higher than others. Mit rock^2 electronic werden beispielsweise Dokumente, die die Suchbegriffe im Feld „genre“ enthalten, höher eingestuft als andere durchsuchbare Felder im Index.For example, rock^2 electronic will boost documents that contain the search terms in the genre field higher than other searchable fields in the index. Darüber hinaus wird Dokumenten, die den Suchbegriff rock enthalten, aufgrund des Werts für die Begriffsverstärkung (2) ein höherer Rang zugewiesen als Dokumenten mit dem anderen Suchbegriff electronic.Further, documents that contain the search term rock will be ranked higher than the other search term electronic as a result of the term boost value (2).

Verwenden Sie zum Verstärken eines Begriffs das Caretzeichen „^“ mit einem Verstärkungsfaktor (einer Zahl) am Ende des Begriffs, nach dem Sie suchen.To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. Sie können auch Ausdrücke verstärken.You can also boost phrases. Je höher der Verstärkungsfaktor, desto relevanter wird der Begriff im Verhältnis zu anderen Suchbegriffen.The higher the boost factor, the more relevant the term will be relative to other search terms. Der Standardverstärkungsfaktor ist 1.By default, the boost factor is 1. Der Verstärkungsfaktor muss positiv sein, kann aber kleiner als 1 sein (z. B. 0.20).Although the boost factor must be positive, it can be less than 1 (for example, 0.20).

Bei einer Suche mit regulären Ausdrücken werden Übereinstimmungen basierend auf unter Apache Lucene gültigen Mustern gefunden, wie in der RegExp-Klasse dokumentiert.A regular expression search finds a match based on patterns that are valid under Apache Lucene, as documented in the RegExp class. In Azure Cognitive Search wird ein regulärer Ausdruck in Schrägstriche / eingeschlossen.In Azure Cognitive Search, a regular expression is enclosed between forward slashes /.

Geben Sie beispielsweise /[mh]otel/ an, um nach Dokumenten zu suchen, die das Wort „motel“ oder „hotel“ enthalten.For example, to find documents containing "motel" or "hotel", specify /[mh]otel/. Suchen mit regulären Ausdrücken werden mit einzelnen Wörtern abgeglichen.Regular expression searches are matched against single words.

Für einige Tools und Sprachen müssen zusätzlich Escapezeichen verwendet werden.Some tools and languages impose additional escape character requirements. Bei JSON werden Zeichenfolgen, die einen Schrägstrich enthalten, mit einem Escapezeichen in Form eines umgekehrten Schrägstrichs versehen: „microsoft.com/azure/“ wird zu search=/.*microsoft.com\/azure\/.*/, wobei search=/.* <string-placeholder>.*/ dem regulären Ausdruck und microsoft.com\/azure\/ der Zeichenfolge mit einem Escapezeichen in Form eines Schrägstrichs entspricht.For JSON, strings that include a forward slash are escaped with a backward slash: "microsoft.com/azure/" becomes search=/.*microsoft.com\/azure\/.*/ where search=/.* <string-placeholder>.*/ sets up the regular expression, and microsoft.com\/azure\/ is the string with an escaped forward slash.

Sie können die allgemein bekannte Syntax für die Platzhaltersuche nach mehreren (*) oder einzelnen (?) Zeichen verwenden.You can use generally recognized syntax for multiple (*) or single (?) character wildcard searches. Beispielsweise gibt der Abfrageausdruck search=alpha* „alphanumerisch“ und „alphabetisch“ zurück.For example, a query expression of search=alpha* returns "alphanumeric" or "alphabetical". Beachten Sie, dass der Lucene-Abfrageparser die Verwendung dieser Symbole bei einem einzelnen Begriff, nicht bei einem Ausdruck, unterstützt.Note the Lucene query parser supports the use of these symbols with a single term, and not a phrase.

Die vollständige Lucene-Syntax unterstützt Präfix-, Infix- und Suffixvergleiche.Full Lucene syntax supports prefix, infix, and suffix matching. Wenn Sie jedoch nur eine Präfixübereinstimmung benötigen, können Sie die einfache Syntax verwenden. (Die Präfixübereinstimmung wird in beiden Fällen unterstützt.)However, if all you need is prefix matching, you can use the simple syntax (prefix matching is supported in both).

Für die Suffixübereinstimmung, bei denen der Zeichenfolge * oder ? vorangestellt ist (z. B. in search=/.*numeric./), oder die Infixübereinstimmung, sind die vollständige Lucene-Syntax sowie das Schrägstrich-Trennzeichen / für reguläre Ausdrücke erforderlich.Suffix matching, where * or ? precedes the string (as in search=/.*numeric./) or infix matching requires full Lucene syntax, as well as the regular expression forward slash / delimiters. Sie können die Symbole * oder ?You cannot use a * or ? nicht ohne / als erstes Zeichen eines Begriffs oder innerhalb eines Begriffs verwenden.symbol as the first character of a term, or within a term, without the /.

Hinweis

Grundsätzlich ist der Musterabgleich langsam, sodass Sie möglicherweise alternative Methoden untersuchen sollten, z. B. Edge-N-Gramm-Tokenisierung, mit der Token für Zeichenfolgen in einem Begriff erstellt werden.As a rule, pattern matching is slow so you might want to explore alternative methods, such as edge n-gram tokenization that creates tokens for sequences of characters in a term. Der Index wird damit größer, Abfragen werden jedoch möglicherweise schneller ausgeführt, je nach der Form des Musters und der Länge der Zeichenfolgen, die Sie indizieren.The index will be larger, but queries might execute faster, depending on the pattern construction and the length of strings you are indexing.

Während der Abfrageanalyse werden Abfragen, die als Präfix-, Suffix-, Platzhaltersuche oder reguläre Ausdrücke formuliert werden, unverändert an die Abfragestruktur übergeben, wobei die lexikalische Analyse umgangen wird.During query parsing, queries that are formulated as prefix, suffix, wildcard, or regular expressions are passed as-is to the query tree, bypassing lexical analysis. Es werden nur Übereinstimmungen gefunden, wenn der Index die Zeichenfolgen in dem in der Abfrage angegebenen Format enthält.Matches will only be found if the index contains the strings in the format your query specifies. In den meisten Fällen benötigen Sie während der Indizierung ein alternatives Analysetool, das die Integrität der Zeichenfolgen beibehält, damit der Abgleich von Teilausdrücken und -mustern funktioniert.In most cases, you will need an alternative analyzer during indexing that preserves string integrity so that partial term and pattern matching succeeds. Weitere Informationen finden Sie im Thema zur Suche nach Teilausdrücken in Azure Cognitive Search-Abfragen.For more information, see Partial term search in Azure Cognitive Search queries.

Bewerten von Platzhalterabfragen und Abfragen mit regulären AusdrückenScoring wildcard and regex queries

Azure Cognitive Search verwendet für Textabfragen die häufigkeitsbasierte Bewertung (TF-IDF).Azure Cognitive Search uses frequency-based scoring (TF-IDF) for text queries. Für Platzhalterabfragen und Abfragen mit regulären Ausdrücken, bei denen die Anzahl von Begriffen groß sein kann, wird der Häufigkeitsfaktor jedoch ignoriert. Dadurch wird verhindert, dass Übereinstimmungen für seltenere Begriffe bei der Rangzuweisung bevorzugt behandelt werden.However, for wildcard and regex queries where scope of terms can potentially be broad, the frequency factor is ignored to prevent the ranking from biasing towards matches from rarer terms. Alle Übereinstimmungen werden bei Platzhalterabfragen und Abfragen mit regulären Ausdrücken gleich behandelt.All matches are treated equally for wildcard and regex searches.

Weitere InformationenSee also