Funktionen der OData-Volltextsuche in Azure KI Search: search.ismatch
und search.ismatchscoring
Azure KI Search unterstützt Volltextsuche im Kontext von OData-Filterausdrücken über die Funktionen search.ismatch
und search.ismatchscoring
. Diese Funktionen ermöglichen es Ihnen, die Volltextsuche mit strenger boolescher Filterung auf eine Art und Weise zu kombinieren, die nur mit dem Parameter search
auf oberster Ebene der Search-API nicht möglich ist.
Hinweis
Die Funktionen search.ismatch
und search.ismatchscoring
werden nur in Filtern in der Search-API unterstützt. Sie werden nicht in der Vorschlags- oder AutoVervollständigen-API unterstützt.
Syntax
Die folgende EBNF (Erweiterte Backus-Naur-Form) definiert die Grammatik der Funktionen search.ismatch
und search.ismatchscoring
:
search_is_match_call ::=
'search.ismatch'('scoring')?'(' search_is_match_parameters ')'
search_is_match_parameters ::=
string_literal(',' string_literal(',' query_type ',' search_mode)?)?
query_type ::= "'full'" | "'simple'"
search_mode ::= "'any'" | "'all'"
Ein interaktives Syntaxdiagramm ist ebenfalls verfügbar:
Hinweis
Die vollständige EBNF finden Sie in der Referenz zur OData-Ausdruckssyntax für Azure KI Search.
search.ismatch
Die Funktion search.ismatch
wertet eine Volltextsuchabfrage als Teil eines Filterausdrucks aus. Die mit der Suchabfrage übereinstimmenden Dokumente werden im Resultset zurückgegeben. Die folgenden Überladungen dieser Funktion sind verfügbar:
search.ismatch(search)
search.ismatch(search, searchFields)
search.ismatch(search, searchFields, queryType, searchMode)
Die Parameter werden in der folgenden Tabelle definiert:
Parametername | Type | Beschreibung |
---|---|---|
search |
Edm.String |
Die Suchabfrage (in der einfachen oder vollständigen Lucene-Abfragesyntax). |
searchFields |
Edm.String |
Durch Trennzeichen getrennte Liste von durchsuchbaren Feldern, in denen gesucht werden soll. Standardmäßig werden alle durchsuchbaren Felder im Index durchsucht. Wenn Sie die feldbezogene Suche im Parameter search verwenden, überschreiben die Feldspezifizierer in der Lucene-Abfrage alle in diesem Parameter angegebenen Felder. |
queryType |
Edm.String |
'simple' oder 'full' , der Standardwert ist 'simple' . Gibt an, welche Abfragesprache im search -Parameter verwendet wurde. |
searchMode |
Edm.String |
'any' oder 'all' , der Standardwert ist 'any' . Gibt an, ob für beliebige oder alle der Suchbegriffe im Parameter search Übereinstimmungen gefunden werden müssen, damit das Dokument in den Ergebnissen zurückgegeben wird. Bei Verwendung der booleschen Lucene-Operatoren im Parameter search besitzen sie Vorrang vor diesem Parameter. |
Alle der oben aufgeführten Parameter sind gleichwertig mit den entsprechenden Suchanforderungsparametern in der Search-API.
Die Funktion search.ismatch
gibt einen Wert vom Typ Edm.Boolean
zurück. Dies ermöglicht es Ihnen, ihn mit anderen Filterunterausdrücken unter Verwendung der booleschen logischen Operatoren zu kombinieren.
Hinweis
Azure KI Search unterstützt keine Verwendung von search.ismatch
oder search.ismatchscoring
innerhalb von Lambdaausdrücken. Dies bedeutet, dass es nicht möglich ist, Filter über Sammlungen von Objekten zu schreiben, die Volltextsuchtreffer mit strengen Filtertreffern für dasselbe Objekt korrelieren können. Weitere Informationen zu dieser Einschränkung sowie Beispiele finden Sie unter Problembehandlung von Sammlungsfiltern in Azure KI Search. Ausführlichere Informationen dazu, warum diese Einschränkung vorhanden ist, finden Sie unter Grundlegendes zu Sammlungsfiltern in Azure KI Search.
search.ismatchscoring
Die Funktion search.ismatchscoring
gibt ebenso wie die Funktion search.ismatch
true
für Dokumente zurück, die mit der als Parameter übergebenen Volltextsuchabfrage übereinstimmen. Der Unterschied zwischen den beiden Funktionen besteht darin, dass die Relevanzbewertung der Dokumente, die mit der Abfrage search.ismatchscoring
übereinstimmen, in die Gesamtbewertung des Dokuments einfließt, während sich die Dokumentbewertung im Fall von search.ismatch
nicht ändert. Die folgenden Überladungen dieser Funktion sind verfügbar (mit den gleichen Parametern wie bei search.ismatch
):
search.ismatchscoring(search)
search.ismatchscoring(search, searchFields)
search.ismatchscoring(search, searchFields, queryType, searchMode)
Die Funktionen search.ismatch
und search.ismatchscoring
können beide im selben Filterausdruck verwendet werden.
Beispiele
Suche nach Dokumenten mit dem Wort „waterfront“. Diese Filterabfrage ist identisch mit einer Suchanforderung mit search=waterfront
.
search.ismatchscoring('waterfront')
Suche nach Dokumenten mit dem Wort „hostel“ und einer Bewertung größer oder gleich 4 oder Dokumenten mit dem Wort „motel“ und einer Bewertung von 5. Beachten Sie, dass diese Anforderung nicht ohne die Funktion search.ismatchscoring
ausgedrückt werden kann.
search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5
Suche nach Dokumenten ohne das Wort „luxury“:
not search.ismatch('luxury')
Suche nach Dokumenten mit dem Ausdruck „ocean view“ oder einer Bewertung von 5. Die Abfrage search.ismatchscoring
wird nur für die Felder HotelName
und Rooms/Description
ausgeführt.
Dokumente, die nur der zweiten Klausel der Disjunktion entsprechen, werden ebenfalls zurückgegeben (Hotels mit einem Rating
-Wert von 5). Um deutlich zu machen, dass diese Dokumente mit keinem der bewerteten Teile des Ausdrucks übereinstimmen, werden sie mit einem Ergebnis von Null zurückgegeben.
search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5
Suche nach Dokumenten, die die Begriffe „hotel“ und „airport“ in einem Abstand von fünf Wörtern voneinander in der Beschreibung des Hotels sowie ein Rauchverbot für mindestens einige Räume enthalten. Diese Abfrage verwendet die vollständige Lucene-Abfragesprache.
search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)
Suchen Sie im Feld „Beschreibung“ nach Dokumenten mit einem Wort, das mit den Buchstaben „lux“ beginnt. Diese Abfrage verwendet die Präfixsuche in Kombination mit search.ismatch
.
search.ismatch('lux*', 'Description')