Jika memiliki aplikasi penelusuran yang menggunakan data terstruktur atau data tidak terstruktur dengan metadata, Anda dapat menggunakan metadata untuk memfilter kueri penelusuran. Halaman ini menjelaskan cara menggunakan kolom metadata untuk membatasi penelusuran ke kumpulan dokumen tertentu.
Contoh metadata
Tinjau contoh metadata untuk empat file PDF (document_1.pdf, document_2.pdf, document_3.pdf, dan document_4.pdf). Metadata ini akan berada dalam file JSON di bucket Cloud Storage, bersama dengan file PDF. Anda dapat merujuk kembali ke contoh ini saat membaca halaman ini.
{"id": "1", "structData": {"title": "Policy on accepting corrected claims", "category": ["persona_A"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_1.pdf"}}
{"id": "2", "structData": {"title": "Claims documentation and reporting guidelines for commercial members", "category": ["persona_A", "persona_B"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_2.pdf"}}
{"id": "3", "structData": {"title": "Claims guidelines for bundled services and supplies for commercial members", "category": ["persona_B", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_3.pdf"}}
{"id": "4", "structData": {"title": "Advantage claims submission guidelines", "category": ["persona_A", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_4.pdf"}}
Sintaksis ekspresi filter
Pastikan Anda memahami sintaksis ekspresi filter yang akan digunakan untuk menentukan filter penelusuran. Sintaksis ekspresi filter dapat diringkas dengan bentuk Backus–Naur yang diperluas berikut:
# A single expression or multiple expressions that are joined by "AND" or "OR". filter = expression, { " AND " | "OR", expression }; # Expressions can be prefixed with "-" or "NOT" to express a negation. expression = [ "-" | "NOT " ], # A parenthetical expression. | "(", expression, ")" # A simple expression applying to a text field. # Function "ANY" returns true if the field exactly matches any of the literals. ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")" # A simple expression applying to a numerical field. Function "IN" returns true # if a field value is within the range. By default, lower_bound is inclusive and # upper_bound is exclusive. | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")" # A simple expression that applies to a numerical field and compares with a double value. | numerical_field, comparison, double # An expression that applies to a geolocation field with text/street/postal address. | geolocation_field, ":", "GEO_DISTANCE(", literal, ",", distance_in_meters, ")" # An expression that applies to a geolocation field with latitude and longitude. | geolocation_field, ":", "GEO_DISTANCE(", latitude_double, ",", longitude_double, ",", distance_in_meters, ")" # Datetime field | datetime_field, comparison, literal_iso_8601_datetime_format); # A lower_bound is either a double or "*", which represents negative infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. lower_bound = ( double, [ "e" | "i" ] ) | "*"; # An upper_bound is either a double or "*", which represents infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. upper_bound = ( double, [ "e" | "i" ] ) | "*"; # Supported comparison operators. comparison = "<=" | "<" | ">=" | ">" | "="; # A literal is any double quoted string. You must escape backslash (\) and # quote (") characters. literal = double quoted string; text_field = text field - for example, category; numerical_field = numerical field - for example, score; geolocation_field = field of geolocation data type - for example home_address, location; datetime_field = field of datetime data type - for example creation_date, expires_on; literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.
Properti utama yang mendukung pemfilteran
Meskipun kolom properti utama ditetapkan ke dapat diindeks, kolom tersebut mungkin tidak mendukung pemfilteran, faset, dan pengurutan. Misalnya, Anda tidak dapat memfilter kolom yang dipetakan ke properti utama title.
Kolom properti utama berikut dapat digunakan untuk pemfilteran, faset, dan pengurutan ulang.
Kolom properti utama untuk penelusuran kustom yang dapat digunakan dalam filter, faset, dan pengurutan:
CATEGORIES(category)CREATE_TIME(create_time)HASHTAGS(hashtag)LANGUAGE_CODE(language_code)UPDATE_TIME(update_time)URI(uri)
Kolom properti utama untuk penelusuran media yang dapat digunakan dalam filter, faset, dan pengurutan:
MEDIA_AVAILABLE_TIME(media_available_time)MEDIA_CONTENT_INDEX(media_content_index)MEDIA_CONTENT_RATING(media_content_rating)MEDIA_COUNTRY_OF_ORIGIN(media_country_of_origin)MEDIA_DURATION(media_duration)MEDIA_EXPIRE_TIME(media_expire_time)MEDIA_FILTER_TAGS(media_filter_tag)MEDIA_HASH_TAGS(media_hash_tag)MEDIA_IN_LANGUAGES(media_in_language)MEDIA_LIVE_EVENT_END_TIME(media_live_event_end_time)MEDIA_LIVE_EVENT_START_TIME(media_live_event_start_time)MEDIA_PRODUCTION_YEAR(media_production_year)MEDIA_TYPE(media_type)
Sebelum memulai
Pastikan Anda telah membuat aplikasi dan memasukkan data terstruktur atau data tidak terstruktur dengan metadata. Untuk mengetahui informasi selengkapnya, lihat Membuat aplikasi penelusuran.
Menelusuri menggunakan filter metadata
Untuk menelusuri menggunakan filter metadata, ikuti langkah-langkah berikut:
Tentukan kolom metadata yang akan digunakan untuk memfilter kueri penelusuran.
Misalnya, untuk metadata di Sebelum memulai, Anda dapat menggunakan kolom
categorysebagai filter penelusuran. Saat memfilter data terstruktur, seperti dalam contoh metadata, tentukan jalur lengkap ke kolom:structData.category. Kemudian, pengguna dapat memfilterpersona_A,persona_B, ataupersona_C, sehingga penelusuran mereka dibatasi ke dokumen yang terkait dengan persona yang mereka minati.Buat kolom metadata yang dapat diindeks:
Di Google Cloud konsol, buka halaman Aplikasi AI dan di menu navigasi, klik Aplikasi.
Klik aplikasi penelusuran Anda.
Di menu navigasi, klik Data.
Klik tab Skema. Tab ini menampilkan setelan kolom saat ini.
Klik Edit.
Centang kotak Dapat diindeks untuk kolom yang ingin Anda buat agar dapat diindeks.
Klik Simpan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi setelan kolom.
Temukan ID aplikasi Anda. Jika sudah memiliki ID aplikasi, lanjutkan ke langkah berikutnya.
Di Google Cloud konsol, buka halaman Aplikasi AI.
Di halaman Aplikasi, temukan nama aplikasi Anda dan dapatkan ID aplikasi dari kolom ID.
Dapatkan hasil penelusuran.
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \ -d '{ "query": "QUERY", "filter": "FILTER" }'Ganti kode berikut:
PROJECT_ID: ID project Anda.APP_ID: ID aplikasi Anda.QUERY: teks kueri yang akan ditelusuri.FILTER: opsional. Kolom teks yang memungkinkan Anda memfilter kumpulan kolom tertentu, menggunakan sintaksis ekspresi filter. Nilai defaultnya adalah string kosong, yang berarti tidak ada filter yang diterapkan.
Misalnya, Anda mengimpor empat file PDF dengan metadata dari Sebelum memulai. Anda ingin menelusuri dokumen yang berisi kata "klaim", dan hanya membuat kueri dokumen dengan nilai
categorypersona_A. Anda dapat melakukannya dengan menyertakan pernyataan berikut dengan panggilan Anda:"query": "claims", "filter": "category: ANY(\"persona_A\")"Untuk mengetahui informasi selengkapnya, lihat tab REST di Mendapatkan hasil penelusuran untuk aplikasi dengan data terstruktur atau tidak terstruktur.
Klik untuk melihat contoh respons.
Jika melakukan penelusuran seperti yang ada dalam prosedur sebelumnya, Anda dapat mengharapkan respons yang mirip dengan berikut ini. Perhatikan bahwa respons menyertakan tiga dokumen yang memiliki nilai
categorypersona_A.{ "results": [ { "id": "2", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/2", "id": "2", "structData": { "title": "Claims documentation and reporting guidelines for commercial members", "category": [ "persona_A", "persona_B" ] }, "derivedStructData": { "link": "gs://bucketname_87654321/data/document_2.pdf", "extractive_answers": [ { "pageNumber": "1", "content": "lorem ipsum" } ] } } }, { "id": "1", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/1", "id": "1", "structData": { "title": "Policy on accepting corrected claims", "category": [ "persona_A" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "2", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_1.pdf" } } }, { "id": "4", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/4", "id": "4", "structData": { "title": "Advantage claims submission guidelines", "category": [ "persona_A", "persona_C" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "47", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_4.pdf" } } } ], "totalSize": 330, "attributionToken": "UvBRCgsI26PxpQYQs7vQZRIkNjRiYWY1MTItMDAwMC0yZWIwLTg3MTAtMTQyMjNiYzYzMWEyIgdHRU5FUklDKhSOvp0VpovvF8XL8xfC8J4V1LKdFQ", "guidedSearchResult": {}, "summary": {} }
Contoh ekspresi filter
Tabel berikut memberikan contoh ekspresi filter.
| Filter | Hanya menampilkan hasil untuk dokumen dengan: |
|---|---|
category: ANY("persona_A") |
kolom teks category adalah persona_A |
score: IN(*, 100.0e) |
kolom numerik score lebih besar dari negatif tak terhingga dan kurang dari 100,0 |
non-smoking = "true" |
non-smoking boolean bernilai benar |
pet-friendly = "false" |
pet-friendly boolean bernilai salah |
manufactured_date = "2023" |
manufactured date adalah kapan saja pada tahun 2023 |
manufactured_date >= "2024-04-16" |
manufactured_date adalah pada atau setelah 16 April 2024 |
manufactured_date < "2024-04-16T12:00:00-07:00" |
manufactured_date adalah sebelum pukul 12.00 Waktu Musim Panas Pasifik pada 16 April 2024 |
office.location:GEO_DISTANCE("1600 Amphitheater Pkwy, Mountain View, CA, 94043", 500) |
kolom geolokasi office.location berada dalam jarak 500 m dari 1600 Amphitheater Pkwy |
NOT office.location:GEO_DISTANCE("Palo Alto, CA", 1000) |
kolom geolokasi office.location tidak berada dalam radius 1 km dari Palo Alto, California. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
kolom geolokasi office.location berada dalam radius 500 m dari lintang 34.1829 dan bujur -121.293 |
category: ANY("persona_A") AND score: IN(*, 100.0e) |
category adalah persona_A dan score kurang dari 100 |
office.location:GEO_DISTANCE("Mountain View, CA", 500) OR office.location:GEO_DISTANCE("Palo Alto, CA", 500) |
office.location berada dalam jarak 500 m dari Mountain View atau Palo Alto. |
(price<175 AND pet-friendly = "true") OR (price<125 AND pet-friendly = "false") |
price kurang dari 175 dan saya dapat membawa hewan peliharaan, atau price kurang dari 125 dan saya tidak dapat membawa hewan peliharaan |
Langkah berikutnya
- Untuk memahami dampak filter terhadap kualitas penelusuran, evaluasi kualitas penelusuran. Untuk mengetahui informasi selengkapnya, lihat Mengevaluasi kualitas penelusuran.