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 ini memungkinkan Anda untuk menggabungkan pencarian teks lengkap beserta pemfilteran Boolean yang ketat dengan cara yang tidak mungkin hanya menggunakan parameter search tingkat atas dari Search API.

Catatan

Fungsi search.ismatch dan search.ismatchscoring hanya didukung dalam filter di Search API. Fungsi tersebut tidak didukung di API Suggest atau Autocomplete.

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 dengan kueri pencarian akan ditampilkan 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 menggunakan pencarian kolom di parameter search, penentu kolom di kueri Lucene menggantikan kolom apa pun yang ditentukan di 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. Saat menggunakan operator Boolean Lucene di parameter search, operator itu akan lebih diutamakan daripada parameter ini.

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

Fungsi search.ismatch menampilkan nilai jenis Edm.Boolean, yang memungkinkan Anda menyusunnya dengan sub-ekspresi filter lain menggunakan operator logis Boolean.

Catatan

Azure AI Search tidak mendukung penggunaan search.ismatch atau search.ismatchscoring di dalam ekspresi lambda. Ini berarti, menulis filter di atas kumpulan objek yang dapat mengorelasikan kecocokan pencarian teks lengkap dengan kecocokan filter ketat pada objek yang sama tidak mungkin dilakukan. Untuk detail 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. Perbedaan di antara keduanya adalah skor relevansi dokumen yang cocok dengan kueri search.ismatchscoring akan berkontribusi pada skor dokumen keseluruhan, sementara di kasus search.ismatch, skor dokumen tidak akan 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')

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

    search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5

Temukan dokumen tanpa kata "luxury".

    not search.ismatch('luxury')

Temukan dokumen dengan frasa "ocean view" atau peringkat sama dengan 5. Kueri search.ismatchscoring hanya akan dijalankan pada kolom HotelName dan Rooms/Description.

Dokumen yang hanya cocok dengan klausul kedua pemisah juga akan ditampilkan - hotel dengan Rating yang sama dengan 5. Untuk memperjelas bahwa dokumen tersebut tidak cocok dengan bagian ekspresi yang dinilai, dokumen itu akan ditampilkan dengan skor nol.

    search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5

Temukan dokumen dengan istilah "hotel" dan "bandara" yang berada dalam 5 kata satu sama lain di deskripsi hotel, dan dokumen berisi merokok tidak diizinkan di setidaknya beberapa kamar. Kueri ini menggunakan bahasa kueri Lucene lengkap.

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

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')

Langkah berikutnya