Bagikan melalui


Fungsi pencarian teks lengkap OData di Pencarian Azure AI - search.ismatch dan search.ismatchscoring

Azure AI Search mendukung pencarian teks lengkap dalam konteks ekspresi filter OData melalui search.ismatch fungsi dan search.ismatchscoring . Fungsi-fungsi ini memungkinkan Anda menggabungkan pencarian teks lengkap dengan pemfilteran Boolean yang ketat dengan cara yang tidak dimungkinkan hanya dengan menggunakan parameter tingkat search atas Search API.

Catatan

Fungsi search.ismatch dan search.ismatchscoring hanya didukung dalam filter di Search API. Mereka tidak didukung di API Sarankan atau Lengkapi Otomatis .

Sintaks

EBNF(Extended Backus-Naur Form) berikut mendefinisikan tata bahasa fungsi search.ismatch dan 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'"

Diagram sintaksis interaktif juga tersedia:

Catatan

Lihat Referensi sintaks ekspresi OData untuk Pencarian Azure AI untuk EBNF lengkap.

search.ismatch

Fungsi search.ismatch mengevaluasi kueri pencarian teks lengkap sebagai bagian dari ekspresi filter. Dokumen yang cocok dikembalikan dalam tataan hasil. Kelebihan beban berikut dari fungsi ini tersedia:

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

Parameter didefinisikan dalam tabel berikut:

Nama Parameter Tipe Deskripsi
search Edm.String Kueri pencarian (dalam sintaksis kueri Lucene sederhana atau lengkap).
searchFields Edm.String Daftar kolom yang dapat dicari yang dipisahkan koma untuk pencarian; default ke semua kolom yang dapat dicari dalam indeks. Saat Anda menggunakan pencarian bidang dalam search parameter, penentu bidang dalam kueri Lucene mengambil alih bidang apa pun yang ditentukan dalam parameter ini.
queryType Edm.String 'simple' atau 'full'; default ke 'simple'. Menentukan bahasa kueri yang digunakan di parameter search.
searchMode Edm.String 'any' atau 'all', default ke 'any'. Menunjukkan apakah salah satu atau semua istilah pencarian di parameter search harus dicocokkan untuk menentukan dokumen sebagai kecocokan. Ketika Anda menggunakan operator Lucene Boolean dalam search parameter , operator tersebut lebih diutamakan daripada parameter ini.

Semua parameter di atas setara dengan parameter permintaan pencarian di Search API yang sesuai.

Fungsi mengembalikan search.ismatch nilai jenis Edm.Boolean, yang memungkinkan Anda menyusunnya dengan subekspresi filter lainnya menggunakan operator logis Boolean.

Catatan

Azure AI Search tidak mendukung penggunaan search.ismatch atau search.ismatchscoring di dalam ekspresi lambda. Ini berarti tidak mungkin untuk menulis filter atas koleksi objek yang dapat menghubungkan kecocokan pencarian teks lengkap dengan kecocokan filter yang ketat pada objek yang sama. Untuk informasi selengkapnya tentang batasan ini serta contoh, lihat Memecahkan masalah filter koleksi di Azure AI Search. Untuk informasi lebih mendalam tentang mengapa batasan ini ada, lihat Memahami filter koleksi di Azure AI Search.

search.ismatchscoring

Fungsi search.ismatchscoring, seperti fungsi search.ismatch, menampilkan true untuk dokumen yang cocok dengan kueri pencarian teks lengkap yang diteruskan sebagai parameter. Perbedaannya adalah bahwa skor relevansi dokumen yang cocok dengan search.ismatchscoring kueri berkontribusi pada skor dokumen keseluruhan, sedangkan untuk search.ismatch, skor dokumen tidak berubah. Kelebihan beban berikut dari fungsi ini tersedia beserta parameter yang identik dengan search.ismatch:

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

Fungsi search.ismatch dan search.ismatchscoring dapat digunakan dalam ekspresi filter yang sama.

Contoh

Temukan dokumen dengan kata "tepi laut". Kueri filter ini identik dengan permintaan pencarian dengan search=waterfront.

    search.ismatchscoring('waterfront')

Berikut adalah sintaks kueri lengkap untuk permintaan ini, yang dapat Anda jalankan di Search Explorer di portal Microsoft Azure. Output terdiri dari kecocokan di tepi laut, air, dan depan.

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

Temukan dokumen dengan kata "kumpulan" dan peringkat lebih besar atau sama dengan 4, atau dokumen dengan kata "motel" dan sama dengan 3.2. Perhatikan, permintaan ini tidak dapat diekspresikan tanpa search.ismatchscoring fungsi .

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

Berikut adalah sintaks kueri lengkap untuk permintaan ini untuk Search Explorer. Output terdiri dari kecocokan pada hotel dengan kumpulan yang memiliki peringkat lebih besar dari 4, atau motel dengan peringkat sama dengan 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"
}

Temukan dokumen tanpa kata "luxury".

    not search.ismatch('luxury')

Berikut adalah sintaks kueri lengkap untuk permintaan ini. Output terdiri dari kecocokan pada istilah mewah.

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

Temukan dokumen dengan frasa "lautan" atau peringkat sama dengan 3.2. Kueri search.ismatchscoring hanya dijalankan terhadap bidang HotelName dan Description.

Berikut adalah sintaks kueri lengkap untuk permintaan ini. Dokumen yang hanya cocok dengan klausul kedua dari pemisahan juga dikembalikan (khususnya, hotel dengan sama 3.2dengan Rating ). Untuk memperjelas bahwa dokumen-dokumen tersebut tidak cocok dengan salah satu bagian ekspresi yang dinilai, dokumen tersebut dikembalikan dengan skor yang sama dengan nol.

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

Output terdiri dari 4 kecocokan: hotel yang menyebutkan "laut" dalam Deskripsi atau Nama Hotel, atau hotel dengan peringkat 3.2. Perhatikan skor pencarian nol untuk kecocokan pada klausa kedua.

{
  "@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
    }
  ]
}

Temukan dokumen di mana istilah "hotel" dan "bandara" berada dalam 5 kata satu sama lain dalam deskripsi hotel, dan di mana merokok tidak diizinkan di setidaknya beberapa kamar.

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

Berikut sintaks kueri lengkapnya. Untuk berjalan di Search Explorer, lolos dari tanda kutip interior dengan karakter garis miring terbalik.

{
  "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)"
}

Output terdiri dari satu dokumen di mana istilah "hotel" dan "bandara" berada dalam jarak 5 kata. Merokok diperbolehkan untuk beberapa kamar di sebagian besar hotel, termasuk kamar dalam hasil pencarian ini.

{
  "@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
    }
  ]
}

Temukan dokumen yang memiliki kata yang dimulai dengan huruf "lux" di bidang Deskripsi. Kueri ini menggunakan pencarian prefiksyang dikombinasikan dengan search.ismatch.

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

Berikut adalah kueri lengkap:

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

Output terdiri dari kecocokan berikut.

{
  "@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
    }
  ]
}

Langkah berikutnya