Funktionsweise der Volltextsuche in Azure SearchHow full text search works in Azure Search

Dieser Artikel ist für Entwickler bestimmt, die eingehendere Informationen zur Funktionsweise der Lucene-Volltextsuche in Azure Search benötigen.This article is for developers who need a deeper understanding of how Lucene full text search works in Azure Search. Für Textabfragen werden die erwarteten Ergebnisse von Azure Search in den meisten Szenarien problemlos bereitgestellt, aber es kann auch vorkommen, dass Sie ein unerwartetes Ergebnis erhalten.For text queries, Azure Search will seamlessly deliver expected results in most scenarios, but occasionally you might get a result that seems "off" somehow. In diesen Situationen können Kenntnisse der vier Phasen der Lucene-Abfragenausführung (Abfrageanalyse, lexikalische Analyse, Dokumentabgleich, Bewertung) hilfreich beim Identifizieren von bestimmten Änderungen von Abfrageparametern oder der Indexkonfiguration sein, auf denen das gewünschte Ergebnis basiert.In these situations, having a background in the four stages of Lucene query execution (query parsing, lexical analysis, document matching, scoring) can help you identify specific changes to query parameters or index configuration that will deliver the desired outcome.

Hinweis

In Azure Search wird Lucene für die Volltextsuche eingesetzt, aber mit der Lucene-Integration wird nicht alles abgedeckt.Azure Search uses Lucene for full text search, but Lucene integration is not exhaustive. Wir machen die Lucene-Funktionalität selektiv verfügbar und erweitern sie, um die für Azure Search wichtigen Szenarien zu ermöglichen.We selectively expose and extend Lucene functionality to enable the scenarios important to Azure Search.

Architektur – Übersicht und DiagrammArchitecture overview and diagram

Die Verarbeitung einer Abfrage der Volltextsuche beginnt mit der Analyse des Abfragetexts, um die Suchbegriffe zu extrahieren.Processing a full text search query starts with parsing the query text to extract search terms. Für das Suchmodul wird ein Index verwendet, um Dokumente mit übereinstimmenden Begriffen abzurufen.The search engine uses an index to retrieve documents with matching terms. Einzelne Abfrageausdrücke können in bestimmten Fällen auch aufgeteilt und neu zusammengesetzt werden, um eine größere Abdeckung für potenzielle Übereinstimmungen zu erreichen.Individual query terms are sometimes broken down and reconstituted into new forms to cast a broader net over what could be considered as a potential match. Anschließend wird ein Resultset nach einer Relevanzbewertung sortiert, die jedem einzelnen Dokument zugewiesen wird, für das sich eine Übereinstimmung ergibt.A result set is then sorted by a relevance score assigned to each individual matching document. Die in der Liste ganz oben aufgeführten Dokumente werden an die aufrufende Anwendung zurückgegeben.Those at the top of the ranked list are returned to the calling application.

Die Abfrageausführung besteht also aus vier Phasen:Restated, query execution has four stages:

  1. AbfrageanalyseQuery parsing
  2. Lexikalische AnalyseLexical analysis
  3. Dokumentabgleich/-abrufDocument retrieval
  4. BewertungScoring

Im Diagramm unten sind die Komponenten dargestellt, die zum Verarbeiten einer Suchanfrage verwendet werden.The diagram below illustrates the components used to process a search request.

Diagramm zur Lucene-Abfragearchitektur in Azure Search

Wichtige KomponentenKey components Beschreibung der FunktionFunctional description
AbfrageparserQuery parsers Dient zum Trennen von Abfrageausdrücken von Abfrageoperatoren und zum Erstellen der Abfragestruktur, die an das Suchmodul gesendet werden soll.Separate query terms from query operators and create the query structure (a query tree) to be sent to the search engine.
AnalysemoduleAnalyzers Dienen zum Durchführen der lexikalischen Analyse für Abfrageausdrücke.Perform lexical analysis on query terms. Dieser Prozess kann das Transformieren, Entfernen oder Erweitern von Abfrageausdrücken umfassen.This process can involve transforming, removing, or expanding of query terms.
IndexIndex Eine effiziente Datenstruktur zum Speichern und Organisieren von Suchbegriffen, die aus indizierten Dokumenten extrahiert werden.An efficient data structure used to store and organize searchable terms extracted from indexed documents.
SuchmodulSearch engine Dient zum Abrufen und Bewerten von Dokumenten mit Übereinstimmungen basierend auf dem Inhalt des invertierten Index.Retrieves and scores matching documents based on the contents of the inverted index.

Anatomie einer SuchanfrageAnatomy of a search request

Eine Suchanfrage ist eine vollständige Spezifikation dessen, was in einem Resultset zurückgegeben werden soll.A search request is a complete specification of what should be returned in a result set. In ihrer einfachsten Form handelt es sich um eine leere Abfrage ohne jegliche Kriterien.In simplest form, it is an empty query with no criteria of any kind. Ein realistischeres Beispiel enthält Parameter, mehrere Abfrageausdrücke, die ggf. auf einen bestimmten Feldbereich festgelegt sind, und unter Umständen einen Filterausdruck und Regeln für die Sortierung.A more realistic example includes parameters, several query terms, perhaps scoped to certain fields, with possibly a filter expression and ordering rules.

Das folgende Beispiel ist eine Suchanfrage, die Sie per REST-API an Azure Search senden können.The following example is a search request you might send to Azure Search using the REST API.

POST /indexes/hotels/docs/search?api-version=2019-05-06
{
    "search": "Spacious, air-condition* +\"Ocean view\"",
    "searchFields": "description, title",
    "searchMode": "any",
    "filter": "price ge 60 and price lt 300",
    "orderby": "geo.distance(location, geography'POINT(-159.476235 22.227659)')", 
    "queryType": "full" 
}

Für diese Anforderung führt das Suchmodul die folgenden Schritte aus:For this request, the search engine does the following:

  1. Filtert die Dokumente heraus, für die der Preis zwischen 60 und 300 USD liegt.Filters out documents where the price is at least $60 and less than $300.
  2. Führt die Abfrage aus.Executes the query. In diesem Beispiel besteht die Suchabfrage aus Wortgruppen und Ausdrücken: "Spacious, air-condition* +\"Ocean view\"". (Benutzer geben häufig keine Satzzeichen ein, aber anhand der Verwendung im Beispiel können wir erklären, wie sie von Analysemodulen verarbeitet werden.)In this example, the search query consists of phrases and terms: "Spacious, air-condition* +\"Ocean view\"" (users typically don't enter punctuation, but including it in the example allows us to explain how analyzers handle it). Für diese Abfrage durchsucht das Suchmodul die Felder mit der Beschreibung und dem Titel, die in searchFields angegeben sind, nach Dokumenten mit dem Text „Ocean view“ sowie nach dem Begriff „spacious“ oder nach Begriffen, die mit „air-condition“ beginnen.For this query, the search engine scans the description and title fields specified in searchFields for documents that contain "Ocean view", and additionally on the term "spacious", or on terms that start with the prefix "air-condition". Der Parameter searchMode wird verwendet, um eine Übereinstimmung für einen beliebigen Begriff (Standard) oder alle Begriffe zu erzielen, wenn ein Begriff nicht explizit erforderlich ist (+).The searchMode parameter is used to match on any term (default) or all of them, for cases where a term is not explicitly required (+).
  3. Sortiert die sich ergebenden Hotels nach ihrer Entfernung zu einem bestimmten geografischen Ort und gibt die Daten dann an die aufrufende Anwendung zurück.Orders the resulting set of hotels by proximity to a given geography location, and then returned to the calling application.

In diesem Artikel geht es hauptsächlich um die Verarbeitung der Suchabfrage: "Spacious, air-condition* +\"Ocean view\"".The majority of this article is about processing of the search query: "Spacious, air-condition* +\"Ocean view\"". Auf die Filterung und Sortierung wird hier nicht näher eingegangen.Filtering and ordering are out of scope. Weitere Informationen finden Sie in der Referenzdokumentation zur Search-API.For more information, see the Search API reference documentation.

Phase 1: AbfrageanalyseStage 1: Query parsing

Wie bereits erwähnt, ist die Abfragezeichenfolge die erste Zeile der Anfrage:As noted, the query string is the first line of the request:

 "search": "Spacious, air-condition* +\"Ocean view\"", 

Der Abfrageparser trennt Operatoren (z.B. * und + im Beispiel) von Suchbegriffen und unterteilt die Suchabfrage in Unterabfragen eines unterstützten Typs:The query parser separates operators (such as * and + in the example) from search terms, and deconstructs the search query into subqueries of a supported type:

  • Begriffsabfrage für eigenständige Begriffe (z.B. „spacious“)term query for standalone terms (like spacious)
  • Ausdrucksabfrage für Begriffe in Anführungszeichen (z.B. „ocean view“)phrase query for quoted terms (like ocean view)
  • Präfixabfrage für Ausdrücke, auf die der Präfixoperator * folgt (z.B. „air-condition“)prefix query for terms followed by a prefix operator * (like air-condition)

Eine vollständige Liste mit unterstützten Abfragetypen finden Sie unter Lucene-Abfragesyntax.For a full list of supported query types see Lucene query syntax

Mit Operatoren, denen eine Unterabfrage zugeordnet ist, wird bestimmt, ob die Abfrage erfüllt werden „muss“ oder erfüllt sein „sollte“, damit ein Dokument als Übereinstimmung angesehen wird.Operators associated with a subquery determine whether the query "must be" or "should be" satisfied in order for a document to be considered a match. +"Ocean view" „muss“ aufgrund des Operators + beispielsweise erfüllt sein.For example, +"Ocean view" is "must" due to the + operator.

Der Abfrageparser strukturiert die Unterabfragen als Abfragestruktur (interne Struktur zur Darstellung der Abfrage) neu und übergibt sie an das Suchmodul.The query parser restructures the subqueries into a query tree (an internal structure representing the query) it passes on to the search engine. In der ersten Phase der Abfrageanalyse sieht die Abfragestruktur wie folgt aus:In the first stage of query parsing, the query tree looks like this.

Boolesche Abfrage: Suchmodus „any“

Unterstützte Parser: Lucene-Optionen „simple“ und „full“Supported parsers: Simple and Full Lucene

In Azure Search werden zwei unterschiedliche Abfragesprachen verfügbar gemacht: simple (Standard) und full.Azure Search exposes two different query languages, simple (default) and full. Indem Sie den Parameter queryType für Ihre Suchanfrage festlegen, weisen Sie den Abfrageparser an, welche Abfragesprache zur Verwendung ausgewählt werden soll. Er verfügt somit über die Funktionen zum Interpretieren der Operatoren und der Syntax.By setting the queryType parameter with your search request, you tell the query parser which query language you choose so that it knows how to interpret the operators and syntax. Die einfache Abfragesprache ist intuitiv und robust und häufig gut geeignet, um die Benutzereingabe unverändert ohne clientseitige Verarbeitung zu interpretieren.The Simple query language is intuitive and robust, often suitable to interpret user input as-is without client-side processing. Sie unterstützt Abfrageoperatoren, die Sie aus anderen Websuchmodulen kennen.It supports query operators familiar from web search engines. Bei der vollständigen Lucene-Abfragesprache, die Sie durch das Festlegen von queryType=full erhalten, wird die einfache Abfragesprache erweitert. Es wird Unterstützung für weitere Operatoren und Abfragetypen hinzugefügt, z.B. Platzhalter, Fuzzy Matching, reguläre Ausdrücke und feldbezogene Abfragen.The Full Lucene query language, which you get by setting queryType=full, extends the default Simple query language by adding support for more operators and query types like wildcard, fuzzy, regex, and field-scoped queries. Ein regulärer Ausdruck, der mit einfacher Abfragesyntax gesendet wird, wird beispielsweise als Abfragezeichenfolge und nicht als Ausdruck interpretiert.For example, a regular expression sent in Simple query syntax would be interpreted as a query string and not an expression. Für die Beispielabfrage in diesem Artikel wird die vollständige Lucene-Abfragesprache verwendet.The example request in this article uses the Full Lucene query language.

Auswirkung von searchMode auf den ParserImpact of searchMode on the parser

Ein anderer Parameter der Suchanfrage, der sich auf die Analyse auswirkt, ist der Parameter searchMode.Another search request parameter that affects parsing is the searchMode parameter. Er steuert den Standardoperator für boolesche Abfragen: „any“ (Standard) oder „all“.It controls the default operator for Boolean queries: any (default) or all.

Bei searchMode=any, also der Standardeinstellung, lautet die Trennung zwischen „spacious“ und „air-condition“ OR (||), sodass der Text der Beispielabfrage Folgendem entspricht:When searchMode=any, which is the default, the space delimiter between spacious and air-condition is OR (||), making the sample query text equivalent to:

Spacious,||air-condition*+"Ocean view" 

Explizite Operatoren, z.B. + in +"Ocean view", sind in der booleschen Abfrage eindeutig (der Begriff muss übereinstimmen).Explicit operators, such as + in +"Ocean view", are unambiguous in boolean query construction (the term must match). Weniger eindeutig ist, wie die restlichen Begriffe interpretiert werden müssen: „spacious“ und „air-condition“.Less obvious is how to interpret the remaining terms: spacious and air-condition. Soll das Suchmodul nach Übereinstimmungen für „ocean view“ und „spacious“ und „air-condition“ suchen?Should the search engine find matches on ocean view and spacious and air-condition? Oder soll nach „ocean view“ und einem der beiden anderen Begriffe gesucht werden?Or should it find ocean view plus either one of the remaining terms?

Standardmäßig (searchMode=any) wird vom Suchmodul die weniger eingeschränkte Interpretation vorausgesetzt.By default (searchMode=any), the search engine assumes the broader interpretation. Für eines der Felder sollte sich eine Übereinstimmung ergeben. Dies wird mit „OR“ angegeben.Either field should be matched, reflecting "or" semantics. In der Abbildung mit der ersten Abfragestruktur weiter oben, die die beiden Vorgänge vom Typ „sollte“ enthält, ist die Standardeinstellung dargestellt.The initial query tree illustrated previously, with the two "should" operations, shows the default.

Angenommen, wir legen jetzt searchMode=all fest.Suppose that we now set searchMode=all. In diesem Fall wird die Leerstelle als Vorgang vom Typ „and“ interpretiert.In this case, the space is interpreted as an "and" operation. Jeder der restlichen Begriffe muss im Dokument vorhanden sein, damit sich dafür eine Übereinstimmung ergibt.Each of the remaining terms must both be present in the document to qualify as a match. Die sich ergebende Beispielabfrage wird dann wie folgt interpretiert:The resulting sample query would be interpreted as follows:

+Spacious,+air-condition*+"Ocean view"

Eine geänderte Abfragestruktur für diese Abfrage, bei der ein übereinstimmendes Dokument der Schnittpunkt aller drei Unterabfragen ist, würde wie folgt lauten:A modified query tree for this query would be as follows, where a matching document is the intersection of all three subqueries:

Boolesche Abfrage: Suchmodus „all“

Hinweis

Sie können am besten entscheiden, ob Sie searchMode=any oder searchMode=all wählen sollen, indem Sie jeweils aussagekräftige Testabfragen durchführen.Choosing searchMode=any over searchMode=all is a decision best arrived at by running representative queries. Benutzer, die Operatoren verwenden (häufig beim Durchsuchen von Dokumentspeichern), empfinden die Ergebnisse ggf. als intuitiver, wenn searchMode=all für boolesche Abfragen genutzt wird.Users who are likely to include operators (common when searching document stores) might find results more intuitive if searchMode=all informs boolean query constructs. Weitere Informationen zum Zusammenwirken von searchMode und Operatoren finden Sie unter Einfache Abfragesyntax.For more about the interplay between searchMode and operators, see Simple query syntax.

Phase 2: Lexikalische AnalyseStage 2: Lexical analysis

Mit lexikalischen Analysemodulen werden Begriffsabfragen und Ausdrucksabfragen verarbeitet, nachdem die Abfragestruktur erstellt wurde.Lexical analyzers process term queries and phrase queries after the query tree is structured. Ein Analysemodul akzeptiert die Texteingaben des Parsers, verarbeitet den Text und sendet dann mit Token versehene Begriffe zurück, damit sie in die Abfragestruktur einbezogen werden können.An analyzer accepts the text inputs given to it by the parser, processes the text, and then sends back tokenized terms to be incorporated into the query tree.

Die häufigste Form der lexikalischen Analyse ist die linguistische Analyse, bei der Abfrageausdrücke basierend auf bestimmten Regeln einer Abfragesprache transformiert werden:The most common form of lexical analysis is linguistic analysis which transforms query terms based on rules specific to a given language:

  • Reduzieren eines Abfrageausdrucks auf den Stamm eines WortsReducing a query term to the root form of a word
  • Entfernen von nicht unbedingt benötigten Wörtern (Stoppwörter, z.B. „the“ oder „and“ für Englisch)Removing non-essential words (stopwords, such as "the" or "and" in English)
  • Aufteilen eines zusammengesetzten Worts in seine BestandteileBreaking a composite word into component parts
  • Konvertieren eines kleingeschriebenen Worts in ein großgeschriebenes WortLower casing an upper case word

Bei all diesen Vorgängen werden Unterschiede zwischen der Texteingabe des Benutzers und den im Index gespeicherten Begriffen normalerweise beseitigt.All of these operations tend to erase differences between the text input provided by the user and the terms stored in the index. Vorgänge dieser Art gehen über die Textverarbeitung hinaus und erfordern umfassende Kenntnisse der Sprache.Such operations go beyond text processing and require in-depth knowledge of the language itself. Um diese Ebene der linguistischen Erkennung hinzuzufügen, unterstützt Azure Search eine lange Liste mit Sprachanalysen von Lucene und Microsoft.To add this layer of linguistic awareness, Azure Search supports a long list of language analyzers from both Lucene and Microsoft.

Hinweis

Die Analyseanforderungen können je nach Szenario von minimal bis ausführlich reichen.Analysis requirements can range from minimal to elaborate depending on your scenario. Sie können die Komplexität der lexikalischen Analyse steuern, indem Sie eine der vordefinierten Analysen auswählen oder Ihre eigene benutzerdefinierte Analyse erstellen.You can control complexity of lexical analysis by the selecting one of the predefined analyzers or by creating your own custom analyzer. Der Bereich der Analysen ist auf die suchbaren Felder festgelegt, und die Analysen werden als Teil einer Felddefinition angegeben.Analyzers are scoped to searchable fields and are specified as part of a field definition. So können Sie die lexikalische Analyse pro Feld festlegen.This allows you to vary lexical analysis on a per-field basis. Wenn keine Angabe vorhanden ist, wird die Analyse Standard von Lucene verwendet.Unspecified, the standard Lucene analyzer is used.

In unserem Beispiel enthält die erste Abfragestruktur vor der Analyse den Begriff „Spacious“ mit einem großen „S“ und einem Komma, das vom Abfrageparser als Teil des Abfrageausdrucks interpretiert wird (ein Komma wird nicht als Operator einer Abfragesprache angesehen).In our example, prior to analysis, the initial query tree has the term "Spacious," with an uppercase "S" and a comma that the query parser interprets as a part of the query term (a comma is not considered a query language operator).

Wenn die Standardanalyse den Ausdruck verarbeitet, werden „ocean view“ und „spacious“ in Kleinbuchstaben konvertiert, und das Komma wird entfernt.When the default analyzer processes the term, it will lowercase "ocean view" and "spacious", and remove the comma character. Die geänderte Abfragestruktur sieht wie folgt aus:The modified query tree will look as follows:

Boolesche Abfrage mit analysierten Ausdrücken

Testen des AnalyseverhaltensTesting analyzer behaviors

Das Verhalten einer Analyse kann mit der Analyse-API getestet werden.The behavior of an analyzer can be tested using the Analyze API. Geben Sie den Text ein, den Sie analysieren möchten, um zu ermitteln, welche Ausdrücke von der jeweiligen Analyse generiert werden.Provide the text you want to analyze to see what terms given analyzer will generate. Sie können beispielsweise die folgende Anfrage ausgeben, um zu ermitteln, wie die Standardanalyse den Text „air-condition“ verarbeitet:For example, to see how the standard analyzer would process the text "air-condition", you can issue the following request:

{
    "text": "air-condition",
    "analyzer": "standard"
}

Die Standardanalyse teilt den Eingabetext in die folgenden beiden Token auf und fügt Attribute wie Start- und Endoffset (zur Hervorhebung von Treffern) und die Position (für den Wortgruppenabgleich) hinzu:The standard analyzer breaks the input text into the following two tokens, annotating them with attributes like start and end offsets (used for hit highlighting) as well as their position (used for phrase matching):

{
  "tokens": [
    {
      "token": "air",
      "startOffset": 0,
      "endOffset": 3,
      "position": 0
    },
    {
      "token": "condition",
      "startOffset": 4,
      "endOffset": 13,
      "position": 1
    }
  ]
}

Ausnahmen bei der lexikalischen AnalyseExceptions to lexical analysis

Die lexikalische Analyse gilt nur für Abfragetypen, für die vollständige Ausdrücke erforderlich sind – entweder eine Begriffsabfrage oder eine Ausdrucksabfrage.Lexical analysis applies only to query types that require complete terms – either a term query or a phrase query. Dies gilt nicht für Abfragetypen mit unvollständigen Ausdrücken – Präfixabfrage, Platzerhalterabfrage, Abfrage regulärer Ausdrücke – oder für eine Fuzzyabfrage.It doesn’t apply to query types with incomplete terms – prefix query, wildcard query, regex query – or to a fuzzy query. Diese Abfragetypen, einschließlich der Präfixabfrage mit dem Ausdruck air-condition* in unserem Beispiel, werden der Abfragestruktur direkt hinzugefügt, und die Analysephase wird umgangen.Those query types, including the prefix query with term air-condition* in our example, are added directly to the query tree, bypassing the analysis stage. Die einzige Transformation, die für die Abfrageausdrücke dieser Typen durchgeführt wird, ist die Umwandlung in Kleinbuchstaben.The only transformation performed on query terms of those types is lowercasing.

Phase 3: Dokumentabgleich/-abrufStage 3: Document retrieval

Der Dokumentabruf bezieht sich auf das Suchen nach Dokumenten mit übereinstimmenden Ausdrücken im Index.Document retrieval refers to finding documents with matching terms in the index. Diese Phase lässt sich am besten anhand eines Beispiels beschreiben.This stage is understood best through an example. Wir beginnen mit einem Hotelindex mit dem folgenden einfachen Schema:Let's start with a hotels index having the following simple schema:

{
    "name": "hotels",
    "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "title", "type": "Edm.String", "searchable": true },
        { "name": "description", "type": "Edm.String", "searchable": true }
    ] 
} 

Wir nehmen weiter an, dass dieser Index die folgenden vier Dokumente enthält:Further assume that this index contains the following four documents:

{
    "value": [
        {
            "id": "1",
            "title": "Hotel Atman",
            "description": "Spacious rooms, ocean view, walking distance to the beach."
        },
        {
            "id": "2",
            "title": "Beach Resort",
            "description": "Located on the north shore of the island of Kauaʻi. Ocean view."
        },
        {
            "id": "3",
            "title": "Playa Hotel",
            "description": "Comfortable, air-conditioned rooms with ocean view."
        },
        {
            "id": "4",
            "title": "Ocean Retreat",
            "description": "Quiet and secluded"
        }
    ]
}

Indizieren von AusdrückenHow terms are indexed

Für das Verständnis des Abrufs ist es hilfreich, einige Grundlagen zur Indizierung zu kennen.To understand retrieval, it helps to know a few basics about indexing. Die Speichereinheit ist ein invertierter Index (einer für jedes suchbare Feld).The unit of storage is an inverted index, one for each searchable field. In einem invertierten Index ist eine sortierte Liste aller Ausdrücke aus allen Dokumenten enthalten.Within an inverted index is a sorted list of all terms from all documents. Jeder Ausdruck wird der Liste mit den Dokumenten zugeordnet, in denen er vorkommt. Dies ist im Beispiel unten dargestellt.Each term maps to the list of documents in which it occurs, as evident in the example below.

Zum Erstellen der Ausdrücke in einem invertierten Index führt das Suchmodul eine lexikalische Analyse für den Inhalt von Dokumenten durch. Dies ähnelt der Vorgehensweise während der Abfrageverarbeitung:To produce the terms in an inverted index, the search engine performs lexical analysis over the content of documents, similar to what happens during query processing:

  1. Texteingaben werden je nach Konfiguration des Analysemoduls an eine Analyse übergeben, in Kleinbuchstaben konvertiert, von Satzzeichen befreit usw.Text inputs are passed to an analyzer, lower-cased, stripped of punctuation, and so forth, depending on the analyzer configuration.
  2. Token sind die Ausgabe der Textanalyse.Tokens are the output of text analysis.
  3. Ausdrücke werden dem Index hinzugefügt.Terms are added to the index.

Es ist zwar nicht unbedingt erforderlich, aber häufig werden die gleichen Analysen für Such- und Indiziervorgänge verwendet, sodass Abfrageausdrücke eher wie Ausdrücke im Index aussehen.It's common, but not required, to use the same analyzers for search and indexing operations so that query terms look more like terms inside the index.

Hinweis

In Azure Search können Sie verschiedene Analysen für das Indizieren und Suchen nach zusätzlichen Feldparametern vom Typ indexAnalyzer und searchAnalyzer angeben.Azure Search lets you specify different analyzers for indexing and search via additional indexAnalyzer and searchAnalyzer field parameters. Wenn keine Angabe vorhanden ist, wird die Analyse, die mit der analyzer-Eigenschaft festgelegt wird, sowohl für die Indizierung als auch für die Suche verwendet.If unspecified, the analyzer set with the analyzer property is used for both indexing and searching.

Invertierter Index für BeispieldokumenteInverted index for example documents

Wir kehren zu unserem Beispiel zurück. Für das Feld title sieht der invertierte Index wie folgt aus:Returning to our example, for the title field, the inverted index looks like this:

BegriffTerm DokumentlisteDocument list
atmanatman 11
beachbeach 22
hotelhotel 1, 31, 3
oceanocean 44
playaplaya 33
resortresort 33
retreatretreat 44

Im Feld „title“ kommt hotel nur in zwei Dokumenten vor: 1 und 3.In the title field, only hotel shows up in two documents: 1, 3.

Für das Feld description sieht der Index wie folgt aus:For the description field, the index is as follows:

BegriffTerm DokumentlisteDocument list
airair 33
andand 44
beachbeach 11
conditionedconditioned 33
comfortablecomfortable 33
distancedistance 11
islandisland 22
kauaʻikauaʻi 22
locatedlocated 22
northnorth 22
oceanocean 1, 2, 31, 2, 3
ofof 22
onon 22
quietquiet 44
roomsrooms 1, 31, 3
secludedsecluded 44
shoreshore 22
spaciousspacious 11
thethe 1, 21, 2
zuto 11
viewview 1, 2, 31, 2, 3
walkingwalking 11
withwith 33

Ermitteln von Übereinstimmungen zwischen Abfrageausdrücken und indizierten AusdrückenMatching query terms against indexed terms

Basierend auf den obigen invertierten Indizes kehren wir zur Beispielabfrage zurück und sehen uns an, wie für unsere Beispielabfrage Dokumente mit Übereinstimmungen gefunden werden.Given the inverted indices above, let’s return to the sample query and see how matching documents are found for our example query. Hier zur Erinnerung noch einmal die fertige Abfragestruktur:Recall that the final query tree looks like this:

Boolesche Abfrage mit analysierten Ausdrücken

Während der Ausführung der Abfrage werden einzelne Abfragen für die suchbaren Felder unabhängig voneinander ausgeführt.During query execution, individual queries are executed against the searchable fields independently.

  • Die Begriffsabfrage „spacious“ ergibt eine Übereinstimmung mit Dokument 1 (Hotel Atman).The TermQuery, "spacious", matches document 1 (Hotel Atman).

  • Die Präfixabfrage „air-condition*“ ergibt keine Übereinstimmung für Dokumente.The PrefixQuery, "air-condition*", doesn't match any documents.

    Dies ist ein Verhalten, das bei Entwicklern unter Umständen zu Verwirrung führen kann.This is a behavior that sometimes confuses developers. Obwohl der Ausdruck „air-conditioned“ im Dokument vorhanden ist, wird er von der Standardanalyse in zwei Ausdrücke unterteilt.Although the term air-conditioned exists in the document, it is split into two terms by the default analyzer. Wir wissen, dass Präfixabfragen, die Teilausdrücke enthalten, nicht analysiert werden.Recall that prefix queries, which contain partial terms, are not analyzed. Aus diesem Grund wird im invertierten Index nicht nach Ausdrücken mit dem Präfix „air-condition“ gesucht, und sie werden somit auch nicht gefunden.Therefore terms with prefix "air-condition" are looked up in the inverted index and not found.

  • Bei der Ausdrucksabfrage „ocean view“ wird nach den Begriffen „ocean“ und „view“ gesucht und die Nähe der Begriffe zueinander im Originaldokument überprüft.The PhraseQuery, "ocean view", looks up the terms "ocean" and "view" and checks the proximity of terms in the original document. Für die Dokumente 1, 2 und 3 ergeben sich für diese Abfrage im Feld „description“ Übereinstimmungen.Documents 1, 2 and 3 match this query in the description field. Beachten Sie, dass Dokument 4 den Begriff „ocean“ im Titel enthält, aber nicht als Übereinstimmung angesehen wird, da wir nach dem Ausdruck „ocean view“ und nicht nach einzelnen Wörtern suchen.Notice document 4 has the term ocean in the title but isn’t considered a match, as we're looking for the "ocean view" phrase rather than individual words.

Hinweis

Eine Suchabfrage wird unabhängig für alle suchbaren Felder im Azure Search-Index ausgeführt, sofern Sie den Satz der Felder nicht mit dem Parameter searchFields beschränken. Dies ist in der Beispielsuchanfrage dargestellt.A search query is executed independently against all searchable fields in the Azure Search index unless you limit the fields set with the searchFields parameter, as illustrated in the example search request. Dokumente, für die sich in den ausgewählten Feldern Übereinstimmungen ergeben, werden zurückgegeben.Documents that match in any of the selected fields are returned.

Insgesamt ergeben sich für die hier verwendete Abfrage Übereinstimmungen für die Dokumente 1, 2 und 3.On the whole, for the query in question, the documents that match are 1, 2, 3.

Phase 4: BewertungStage 4: Scoring

Jedem Dokument eines Suchergebnisses wird eine Relevanzbewertung zugewiesen.Every document in a search result set is assigned a relevance score. Die Funktion der Relevanzbewertung besteht darin, die Dokumente höher einzustufen, die in Bezug auf die Suchabfrage die beste Beantwortung der Suchabfrage eines Benutzers darstellen.The function of the relevance score is to rank higher those documents that best answer a user question as expressed by the search query. Die Bewertung wird basierend auf den statistischen Eigenschaften der Ausdrücke berechnet, für die sich Übereinstimmungen ergeben.The score is computed based on statistical properties of terms that matched. Der Kern der Bewertungsformel ist das TF-IDF-Maß (term frequency – inverse document frequency, Vorkommenshäufigkeit – inverse Dokumenthäufigkeit).At the core of the scoring formula is TF/IDF (term frequency-inverse document frequency). In Abfragen, die seltene und häufige Ausdrücke enthalten, werden mit TF/IDF Ergebnisse höhergestuft, die den seltenen Ausdruck enthalten.In queries containing rare and common terms, TF/IDF promotes results containing the rare term. Für einen hypothetischen Index mit allen Wikipedia-Artikeln gilt für Dokumente, für die die Abfrage the president durchgeführt wurde, beispielsweise Folgendes: Dokumente, die Übereinstimmungen für president enthalten, werden mit einer höheren Relevanz als Dokumente versehen, die Übereinstimmungen für the enthalten.For example, in a hypothetical index with all Wikipedia articles, from documents that matched the query the president, documents matching on president are considered more relevant than documents matching on the.

Beispiel für die BewertungScoring example

Für die drei Dokumente, für die sich Übereinstimmungen mit unserer Beispielabfrage ergeben haben, galt Folgendes:Recall the three documents that matched our example query:

search=Spacious, air-condition* +"Ocean view"  
{
  "value": [
    {
      "@search.score": 0.25610128,
      "id": "1",
      "title": "Hotel Atman",
      "description": "Spacious rooms, ocean view, walking distance to the beach."
    },
    {
      "@search.score": 0.08951007,
      "id": "3",
      "title": "Playa Hotel",
      "description": "Comfortable, air-conditioned rooms with ocean view."
    },
    {
      "@search.score": 0.05967338,
      "id": "2",
      "title": "Ocean Resort",
      "description": "Located on a cliff on the north shore of the island of Kauai. Ocean view."
    }
  ]
}

Für Dokument 1 hat die Abfrage die beste Übereinstimmung ergeben, da sowohl der Begriff spacious als auch der erforderliche Ausdruck ocean view im Feld „description“ vorkommt.Document 1 matched the query best because both the term spacious and the required phrase ocean view occur in the description field. Für die nächsten beiden Dokumente ergibt sich nur eine Übereinstimmung mit dem Ausdruck ocean view.The next two documents match only the phrase ocean view. Es ist vielleicht überraschend, dass die Relevanzbewertung für Dokument 2 und 3 unterschiedlich ist, obwohl beide zu einer Übereinstimmung für die Abfrage geführt haben.It might be surprising that the relevance score for document 2 and 3 is different even though they matched the query in the same way. Dies liegt daran, dass die Bewertungsformel über mehr Komponenten als nur TF/IDF verfügt.It's because the scoring formula has more components than just TF/IDF. In diesem Fall wurde Dokument 3 eine etwas höhere Bewertung zugewiesen, da dessen Beschreibung kürzer ist.In this case, document 3 was assigned a slightly higher score because its description is shorter. Informieren Sie sich über Lucene's Practical Scoring Formula (Bewertungsformel von Lucene), damit Sie verstehen, wie sich die Feldlänge und andere Faktoren auf die Relevanzbewertung auswirken können.Learn about Lucene's Practical Scoring Formula to understand how field length and other factors can influence the relevance score.

Einige Abfragetypen (Platzhalter, Präfix, regulärer Ausdruck) tragen immer eine konstante Bewertungspunktzahl zur Gesamtbewertung des Dokuments bei.Some query types (wildcard, prefix, regex) always contribute a constant score to the overall document score. So können Übereinstimmungen, die über die Abfrageerweiterung ermittelt werden, in die Ergebnisse einbezogen werden, ohne dabei die Rangfolge zu beeinträchtigen.This allows matches found through query expansion to be included in the results, but without affecting the ranking.

In einem Beispiel ist dargestellt, warum dies wichtig ist.An example illustrates why this matters. Platzhaltersuchen mit Präfixen sind der Definition nach mehrdeutig, da die Eingabe eine Teilzeichenfolge mit potenziellen Übereinstimmungen für eine sehr große Zahl unterschiedlicher Begriffe ist (beispielsweise die Eingabe „tour*“ mit Übereinstimmungen für „tours“, „tourettes“ und „tourmaline“).Wildcard searches, including prefix searches, are ambiguous by definition because the input is a partial string with potential matches on a very large number of disparate terms (consider an input of "tour*", with matches found on “tours”, “tourettes”, and “tourmaline”). Aufgrund der Art dieser Ergebnisse lässt sich nicht sicher ableiten, welche Begriffe „wertvoller“ als andere sind.Given the nature of these results, there is no way to reasonably infer which terms are more valuable than others. Daher werden Begriffshäufigkeiten beim Bewerten von Ergebnissen in Abfragen vom Typ Platzhalter, Präfix und regulärer Ausdruck ignoriert.For this reason, we ignore term frequencies when scoring results in queries of types wildcard, prefix and regex. Bei einer mehrteiligen Suchanfrage, die Teilbegriffe und vollständige Begriffe enthält, werden Ergebnisse aus der Teileingabe mit einer konstanten Bewertung eingebunden, um die Bevorzugung von potenziell unerwarteten Übereinstimmungen zu vermeiden.In a multi-part search request that includes partial and complete terms, results from the partial input are incorporated with a constant score to avoid bias towards potentially unexpected matches.

Optimieren der BewertungScore tuning

Es gibt zwei Möglichkeiten, wie Sie Relevanzbewertungen in Azure Search optimieren können:There are two ways to tune relevance scores in Azure Search:

  1. Mit Bewertungsprofilen werden Dokumente in der Rangfolgenliste der Ergebnisse basierend auf einer Gruppe von Regeln höhergestuft.Scoring profiles promote documents in the ranked list of results based on a set of rules. In unserem Beispiel können wir Dokumente, für die sich Übereinstimmungen im Feld „title“ ergeben, als relevanter als Dokumente einstufen, für die sich Übereinstimmungen im Feld „description“ ergeben.In our example, we could consider documents that matched in the title field more relevant than documents that matched in the description field. Wenn unser Index über ein Preisfeld für jedes Hotel verfügen würde, könnten wir zusätzlich Dokumente mit einem niedrigeren Preis höherstufen.Additionally, if our index had a price field for each hotel, we could promote documents with lower price. Lesen Sie die weiteren Informationen zum Hinzufügen von Bewertungsprofilen zu einem Suchindex.Learn more how to add Scoring Profiles to a search index.
  2. Beim Term Boosting („Begriffsverstärkung“, nur in der vollständigen Lucene-Abfragesyntax verfügbar) wird der Verstärkungsoperator ^ bereitgestellt, der auf alle Teile der Abfragestruktur angewendet werden kann.Term boosting (available only in the Full Lucene query syntax) provides a boosting operator ^ that can be applied to any part of the query tree. In unserem Beispiel könnten wir anstatt nach dem Präfix air-condition* auch entweder nach dem exakten Begriff air-condition oder dem Präfix suchen. Dokumente, für die sich eine Übereinstimmung mit dem exakten Begriff ergibt, werden dann höher eingestuft, indem die Begriffsabfrage verstärkt wird: air-condition^2||air-condition*.In our example, instead of searching on the prefix air-condition*, one could search for either the exact term air-condition or the prefix, but documents that match on the exact term are ranked higher by applying boost to the term query: *air-condition^2||air-condition**. Hier finden Sie weitere Informationen zum „Term Boosting“.Learn more about term boosting.

Durchführen von Bewertungen in einem verteilten IndexScoring in a distributed index

Alle Indizes in Azure Search werden automatisch in mehrere Shards unterteilt, sodass wir den Index beim zentralen Hoch- oder Herunterskalieren des Diensts schnell auf mehrere Knoten verteilen können.All indexes in Azure Search are automatically split into multiple shards, allowing us to quickly distribute the index among multiple nodes during service scale up or scale down. Wenn eine Suchanfrage ausgegeben wird, erfolgt dies für jeden Shard individuell.When a search request is issued, it’s issued against each shard independently. Die Ergebnisse aller Shards werden dann zusammengeführt und nach der Bewertung sortiert (falls keine andere Sortierung festgelegt ist).The results from each shard are then merged and ordered by score (if no other ordering is defined). Es ist wichtig, dass Sie Folgendes wissen: Die Bewertungsfunktion wägt die Vorkommenshäufigkeit von Abfragebegriffen gegenüber der inversen Dokumenthäufigkeit für alle Dokumente des Shards ab. Nicht übergreifend für alle Shards!It is important to know that the scoring function weights query term frequency against its inverse document frequency in all documents within the shard, not across all shards!

Dies bedeutet, dass eine Relevanzbewertung für identische Dokumente unterschiedliche ausfallen kann, wenn diese sich auf unterschiedlichen Shards befinden.This means a relevance score could be different for identical documents if they reside on different shards. Glücklicherweise sind diese Unterschiede vernachlässigbar, wenn im Index eine größere Zahl von Dokumenten enthalten ist, weil die Begriffe gleichmäßiger verteilt sind.Fortunately, such differences tend to disappear as the number of documents in the index grows due to more even term distribution. Es kann nicht vorausgesagt werden, auf welchem Shard ein Dokument angeordnet wird.It’s not possible to assume on which shard any given document will be placed. Wenn wir aber davon ausgehen, dass sich ein Dokumentschlüssel nicht ändert, wird es immer demselben Shard zugewiesen.However, assuming a document key doesn't change, it will always be assigned to the same shard.

Im Allgemeinen ist die Dokumentbewertung nicht das am besten geeignete Attribut zum Sortieren von Dokumenten, wenn die Stabilität der Sortierung wichtig ist.In general, document score is not the best attribute for ordering documents if order stability is important. Wenn beispielsweise zwei Dokumente mit einer identischen Bewertung vorhanden sind, kann nicht garantiert werden, welches bei nachfolgenden Ausführungen derselben Abfrage zuerst angezeigt wird.For example, given two documents with an identical score, there is no guarantee which one appears first in subsequent runs of the same query. Die Dokumentbewertung soll nur als allgemeiner Hinweis auf die Relevanz des Dokuments relativ zu anderen Dokumenten des Resultsets dienen.Document score should only give a general sense of document relevance relative to other documents in the results set.

ZusammenfassungConclusion

Aufgrund des Erfolgs von Internetsuchmaschinen sind die Erwartungen in Bezug auf die Volltextsuche für private Daten gestiegen.The success of internet search engines has raised expectations for full text search over private data. Für nahezu alle Arten von Suchoberflächen erwarten wir mittlerweile, dass die Suchmaschine unsere Absicht erkennt – auch bei falsch geschriebenen oder unvollständigen Suchbegriffen.For almost any kind of search experience, we now expect the engine to understand our intent, even when terms are misspelled or incomplete. Wir erwarten vielleicht sogar Übereinstimmungen anhand von ähnlichen Begriffen oder Synonymen, die wir gar nicht angegeben haben.We might even expect matches based on near equivalent terms or synonyms that we never actually specified.

Aus technischer Sicht ist die Volltextsuche hochkomplex und erfordert eine anspruchsvolle linguistische Analyse und einen systematischen Verarbeitungsansatz, bei dem Abfrageausdrücke herausgefiltert, erweitert und transformiert werden, um die relevanten Ergebnisse zu liefern.From a technical standpoint, full text search is highly complex, requiring sophisticated linguistic analysis and a systematic approach to processing in ways that distill, expand, and transform query terms to deliver a relevant result. Diese komplexen Anforderungen sind mit vielen Faktoren verbunden, die sich auf das Ergebnis einer Abfrage auswirken können.Given the inherent complexities, there are a lot of factors that can affect the outcome of a query. Aus diesem Grund ist es sinnvoll, Zeit für die Einarbeitung in die Details der Volltextsuche zu investieren. Mit diesem Wissen ergeben sich für Sie nützliche Vorteile bei der Analyse von unerwarteten Ergebnissen.For this reason, investing the time to understand the mechanics of full text search offers tangible benefits when trying to work through unexpected results.

In diesem Artikel wurde die Volltextsuche im Rahmen von Azure Search beschrieben.This article explored full text search in the context of Azure Search. Wir hoffen, dass er genügend Hintergrundinformationen enthält, die Ihnen das Erkennen von potenziellen Ursachen und Lösungen für häufig auftretende Abfrageprobleme ermöglichen.We hope it gives you sufficient background to recognize potential causes and resolutions for addressing common query problems.

Nächste SchritteNext steps

Weitere InformationenSee also

Search Documents (Azure Search Service REST API) (Suchen nach Dokumenten (Azure Search Service-REST-API))Search Documents REST API

Einfache AbfragesyntaxSimple query syntax

Vollständige Lucene-AbfragesyntaxFull Lucene query syntax

Verarbeiten von SuchergebnissenHandle search results