Udostępnij za pośrednictwem


Funkcje wyszukiwania pełnotekstowego OData w usłudze Azure AI Search — search.ismatch i search.ismatchscoring

Usługa Azure AI Search obsługuje wyszukiwanie pełnotekstowe w kontekście wyrażeń filtrów OData za pośrednictwem search.ismatch funkcji i search.ismatchscoring . Te funkcje umożliwiają łączenie wyszukiwania pełnotekstowego z rygorystycznym filtrowaniem logicznym w sposób, który nie jest możliwy tylko przy użyciu parametru najwyższego poziomu searchinterfejsu API wyszukiwania.

Uwaga

Funkcje search.ismatch i search.ismatchscoring są obsługiwane tylko w filtrach w interfejsie API wyszukiwania. Nie są one obsługiwane w interfejsach API Sugerowanie ani Autouzupełnianie .

Składnia

Następujący formularz EBNF (rozszerzony formularz Backus-Naur) definiuje gramatykę search.ismatch funkcji i 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'"

Dostępny jest również interakcyjny diagram składni:

Uwaga

Zobacz dokumentację składni wyrażeń OData dla usługi Azure AI Search , aby zapoznać się z pełną pełną NF.

search.ismatch

Funkcja search.ismatch ocenia zapytanie wyszukiwania pełnotekstowego w ramach wyrażenia filtru. Pasujące dokumenty są zwracane w zestawie wyników. Dostępne są następujące przeciążenia tej funkcji:

  • search.ismatch(search)
  • search.ismatch(search, searchFields)
  • search.ismatch(search, searchFields, queryType, searchMode)

Parametry są zdefiniowane w poniższej tabeli:

Nazwa parametru Typ Opis
search Edm.String Zapytanie wyszukiwania (w prostej lub pełnej składni zapytania Lucene).
searchFields Edm.String Rozdzielona przecinkami lista pól z możliwością wyszukiwania; wartość domyślna to wszystkie pola z możliwością wyszukiwania w indeksie. W przypadku użycia wyszukiwania w polu w parametrze search specyfikatory pól w zapytaniu Lucene zastępują wszystkie pola określone w tym parametrze.
queryType Edm.String 'simple' lub 'full'; wartość domyślna to 'simple'. Określa, jakiego języka zapytań użyto w parametrze search .
searchMode Edm.String 'any' lub 'all', wartość domyślna to 'any'. Wskazuje, czy dowolne lub wszystkie terminy wyszukiwania w parametrze search muszą być dopasowane w celu zliczenia dokumentu jako dopasowania. W przypadku używania operatorów logicznych Lucene w parametrze search mają pierwszeństwo przed tym parametrem.

Wszystkie powyższe parametry są równoważne odpowiednim parametrom żądania wyszukiwania w interfejsie API wyszukiwania.

Funkcja search.ismatch zwraca wartość typu Edm.Boolean, która umożliwia utworzenie jej z innymi podwyrażeniami filtru przy użyciu operatorów logicznych logicznych.

Uwaga

Usługa Azure AI Search nie obsługuje używania search.ismatch ani search.ismatchscoring wewnątrz wyrażeń lambda. Oznacza to, że nie można zapisywać filtrów w kolekcjach obiektów, które mogą korelować dopasowania wyszukiwania pełnotekstowego z ścisłymi dopasowaniami filtrów w tym samym obiekcie. Aby uzyskać więcej informacji na temat tego ograniczenia, a także przykłady, zobacz Rozwiązywanie problemów z filtrami kolekcji w usłudze Azure AI Search. Aby uzyskać bardziej szczegółowe informacje na temat tego, dlaczego to ograniczenie istnieje, zobacz Understanding collection filters in Azure AI Search (Opis filtrów kolekcji w usłudze Azure AI Search).

search.ismatchscoring

Funkcja search.ismatchscoring , podobnie jak search.ismatch funkcja, zwraca true dokumenty pasujące do zapytania wyszukiwania pełnotekstowego przekazanego jako parametr. Różnica między nimi polega na tym, że wynik istotności dokumentów pasujących search.ismatchscoring do zapytania przyczynia się do ogólnego wyniku dokumentu, natomiast dla elementu search.ismatchwynik dokumentu nie zmienia się. Następujące przeciążenia tej funkcji są dostępne z parametrami identycznymi z parametrami :search.ismatch

  • search.ismatchscoring(search)
  • search.ismatchscoring(search, searchFields)
  • search.ismatchscoring(search, searchFields, queryType, searchMode)

Zarówno funkcje , jak search.ismatch i search.ismatchscoring mogą być używane w tym samym wyrażeniu filtru.

Przykłady

Znajdź dokumenty ze słowem "nabrzeża". To zapytanie filtru jest identyczne z żądaniem wyszukiwania za pomocą search=waterfrontpolecenia .

    search.ismatchscoring('waterfront')

Oto pełna składnia zapytania dla tego żądania, którą można uruchomić w Eksploratorze wyszukiwania w witrynie Azure Portal. Dane wyjściowe składają się z dopasowań na nabrzeżu, wodzie i przednie.

{
  "search": "*",
  "select": "HotelId, HotelName, Description",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatchscoring('waterfront')"
}

Znajdź dokumenty ze słowem "pool" i ocenam większym lub równym 4 lub dokumentom ze słowem "motel" i równym 3.2. Należy pamiętać, że nie można wyrazić tego żądania bez search.ismatchscoring funkcji.

    search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2

Oto pełna składnia zapytania dla tego żądania dla Eksploratora wyszukiwania. Dane wyjściowe składają się z dopasowań w hotelach z basenami o ocenie większej niż 4 lub moteli o ocenie równej 3,2.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2"
}

Znajdź dokumenty bez słowa "luksus".

    not search.ismatch('luxury')

Oto pełna składnia zapytania dla tego żądania. Dane wyjściowe składają się z dopasowań do terminu luksus.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "not search.ismatch('luxury')"
}

Znajdź dokumenty z frazą "ocean" lub ocena równa 3.2. Zapytanie search.ismatchscoring jest wykonywane tylko względem pól HotelName i Description.

Oto pełna składnia zapytania dla tego żądania. Zwracane są również dokumenty zgodne tylko z drugą klauzulą rozsyłania (w szczególności hotele z równym Rating3.2). Aby wyjaśnić, że te dokumenty nie pasują do żadnego z ocenianych części wyrażenia, są zwracane z wynikiem równym zero.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Rating",
  "searchMode": "all",
  "queryType": "full",
  "count": true,
  "filter": "search.ismatchscoring('ocean', 'Description,HotelName') or Rating eq 3.2"
}

Dane wyjściowe składają się z 4 dopasowań: hotele, które wspominają o "oceanie" w opisie lub nazwie hotelu, albo hotele z oceną 3.2. Zwróć uwagę na wynik wyszukiwania zero dla dopasowań w drugiej klauzuli.

{
  "@odata.count": 4,
  "value": [
    {
      "@search.score": 1.6076145,
      "HotelId": "18",
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Rating": 4.2
    },
    {
      "@search.score": 1.0594962,
      "HotelId": "41",
      "HotelName": "Windy Ocean Motel",
      "Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
      "Rating": 3.5
    },
    {
      "@search.score": 0,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Rating": 3.2
    },
    {
      "@search.score": 0,
      "HotelId": "26",
      "HotelName": "Planetary Plaza & Suites",
      "Description": "Extend Your Stay. Affordable home away from home, with amenities like free Wi-Fi, full kitchen, and convenient laundry service.",
      "Rating": 3.2
    }
  ]
}

Znajdź dokumenty, w których terminy "hotel" i "lotnisko" znajdują się w odległości 5 słów od siebie w opisie hotelu i gdzie palenie nie jest dozwolone w co najmniej niektórych pokojach.

    search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)

Oto pełna składnia zapytania. Aby uruchomić w Eksploratorze wyszukiwania, należy uruchomić znaki cudzysłowu wewnętrznego znakiem ukośnika odwrotnego.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatch('\"hotel airport\"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)"
}

Dane wyjściowe składają się z jednego dokumentu, w którym terminy "hotel" i "lotnisko" znajdują się w odległości 5 wyrazów. Palenie jest dozwolone dla kilku pokoi w większości hoteli, w tym jednego w tym wyniku wyszukiwania.

{
  "@odata.count": 1,
  "value": [
    {
      "@search.score": 1,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Tags": [
        "bar",
        "free wifi",
        "restaurant"
      ],
      "Rating": 3.2
    }
  ]
}

Znajdź dokumenty, które mają wyraz rozpoczynający się literami "lux" w polu Opis. To zapytanie używa wyszukiwania prefiksów w połączeniu z search.ismatch.

    search.ismatch('lux*', 'Description')

Oto pełne zapytanie:

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatch('lux*', 'Description')"
}

Dane wyjściowe składają się z następujących dopasowań.

{
  "@odata.count": 4,
  "value": [
    {
      "@search.score": 1,
      "HotelId": "18",
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Tags": [
        "view",
        "pool",
        "restaurant"
      ],
      "Rating": 4.2
    },
    {
      "@search.score": 1,
      "HotelId": "13",
      "HotelName": "Luxury Lion Resort",
      "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.",
      "Tags": [
        "bar",
        "concierge",
        "restaurant"
      ],
      "Rating": 4.1
    },
    {
      "@search.score": 1,
      "HotelId": "16",
      "HotelName": "Double Sanctuary Resort",
      "Description": "5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.",
      "Tags": [
        "view",
        "pool",
        "restaurant",
        "bar",
        "continental breakfast"
      ],
      "Rating": 4.2
    },
    {
      "@search.score": 1,
      "HotelId": "14",
      "HotelName": "Twin Vortex Hotel",
      "Description": "New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.",
      "Tags": [
        "bar",
        "restaurant",
        "concierge"
      ],
      "Rating": 4.4
    }
  ]
}

Następne kroki