OData-funktioner för fulltextsökning i Azure AI Search – search.ismatch
och search.ismatchscoring
Azure AI Search stöder fulltextsökning i kontexten för OData-filteruttryck via search.ismatch
funktionerna och search.ismatchscoring
. Med de här funktionerna kan du kombinera fulltextsökning med strikt boolesk filtrering på ett sätt som inte bara är möjligt med hjälp av parametern på den översta nivån search
i sök-API:et.
Kommentar
Funktionerna search.ismatch
och search.ismatchscoring
stöds endast i filter i sök-API:et. De stöds inte i API:erna Föreslå eller Komplettera automatiskt.
Syntax
Följande EBNF (Extended Backus-Naur Form) definierar grammatiken search.ismatch
för funktionerna och 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'"
Ett interaktivt syntaxdiagram är också tillgängligt:
Kommentar
Se syntaxreferens för OData-uttryck för Azure AI Search för hela EBNF.
search.ismatch
Funktionen search.ismatch
utvärderar en fulltextsökningsfråga som en del av ett filteruttryck. Dokumenten som matchar sökfrågan returneras i resultatuppsättningen. Följande överlagringar av den här funktionen är tillgängliga:
search.ismatch(search)
search.ismatch(search, searchFields)
search.ismatch(search, searchFields, queryType, searchMode)
Parametrarna definieras i följande tabell:
Parameternamn | Typ | Beskrivning |
---|---|---|
search |
Edm.String |
Sökfrågan (i antingen enkel eller fullständig Lucene-frågesyntax). |
searchFields |
Edm.String |
Kommaavgränsad lista över sökbara fält att söka i; standardvärdet för alla sökbara fält i indexet. När du använder fältsökning i parametern search åsidosätter fältspecificerarna i Lucene-frågan alla fält som anges i den här parametern. |
queryType |
Edm.String |
'simple' eller 'full' ; är standardvärdet 'simple' . Anger vilket frågespråk som användes i parametern search . |
searchMode |
Edm.String |
'any' eller 'all' , standardvärdet är 'any' . Anger om något eller alla söktermer i parametern search måste matchas för att kunna räkna dokumentet som en matchning. När du använder lucene booleska operatorer i parametern search har de företräde framför den här parametern. |
Alla ovanstående parametrar motsvarar motsvarande sökbegäransparametrar i sök-API:et.
Funktionen search.ismatch
returnerar ett värde av typen Edm.Boolean
, som gör att du kan skriva det med andra filterunderuttryck med hjälp av de booleska logiska operatorerna.
Kommentar
Azure AI Search stöder inte användning av search.ismatch
eller search.ismatchscoring
inuti lambda-uttryck. Det innebär att det inte går att skriva filter över samlingar av objekt som kan korrelera fulltextsökningsmatchningar med strikta filtermatchningar på samma objekt. Mer information om den här begränsningen och exempel finns i Felsöka samlingsfilter i Azure AI Search. Mer detaljerad information om varför den här begränsningen finns finns i Förstå samlingsfilter i Azure AI Search.
search.ismatchscoring
Funktionen search.ismatchscoring
, precis som search.ismatch
funktionen, returnerar true
för dokument som matchar den fulltextsökningsfråga som skickas som en parameter. Skillnaden mellan dem är att relevanspoängen för dokument som matchar search.ismatchscoring
frågan bidrar till den övergripande dokumentpoängen, medan dokumentpoängen i fallet search.ismatch
med inte ändras. Följande överlagringar av den här funktionen är tillgängliga med parametrar som är identiska med parametrarna search.ismatch
för :
search.ismatchscoring(search)
search.ismatchscoring(search, searchFields)
search.ismatchscoring(search, searchFields, queryType, searchMode)
search.ismatch
Både funktionerna och search.ismatchscoring
kan användas i samma filteruttryck.
Exempel
Hitta dokument med ordet "vattnet". Den här filterfrågan är identisk med en sökbegäran med search=waterfront
.
search.ismatchscoring('waterfront')
Hitta dokument med ordet "vandrarhem" och betyg större eller lika med 4, eller dokument med ordet "motell" och betyg lika med 5. Observera att den här begäran inte kunde uttryckas utan funktionen search.ismatchscoring
.
search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5
Hitta dokument utan ordet "lyx".
not search.ismatch('luxury')
Hitta dokument med frasen "ocean view" eller klassificering som är lika med 5. Frågan search.ismatchscoring
körs endast mot fält HotelName
och Rooms/Description
.
Dokument som endast matchade den andra satsen i disjunction returneras också - hotell med lika med Rating
5. För att klargöra att dessa dokument inte matchade någon av de poängsatta delarna i uttrycket returneras de med poäng som är lika med noll.
search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5
Hitta dokument där termerna "hotell" och "flygplats" är inom 5 ord från varandra i beskrivningen av hotellet, och där rökning inte tillåts i åtminstone några av rummen. Den här frågan använder det fullständiga Lucene-frågespråket.
search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)
Hitta dokument som har ett ord som börjar med bokstäverna "lux" i fältet Beskrivning. Den här frågan använder prefixsökning i kombination med search.ismatch
.
search.ismatch('lux*', 'Description')