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:

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.ismatchmed inte ändras. Följande överlagringar av den här funktionen är tillgängliga med parametrar som är identiska med parametrarna search.ismatchfö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')

Nästa steg