Jika memiliki aplikasi penelusuran media, Anda dapat menggunakan metadata untuk memfilter kueri penelusuran. Halaman ini menjelaskan cara menggunakan kolom metadata untuk membatasi penelusuran ke kumpulan dokumen tertentu.
Sebelum memulai
Pastikan Anda telah membuat aplikasi media dan penyimpanan data serta memasukkan data. Untuk mengetahui informasi selengkapnya, lihat Membuat penyimpanan data media dan Membuat aplikasi media.
Contoh dokumen
Tinjau contoh dokumen media ini. Anda dapat merujuknya kembali saat membaca halaman ini.
{"id":"172851","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: Creating the World of Pandora (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/172851\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"243308","schemaId":"default_schema","jsonData":"{\"title\":\"Capturing Avatar (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/243308\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"280218","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: The Way of Water (2022)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\"],\"uri\":\"http://mytestdomain.movie/content/280218\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"72998","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar (2009)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\",\"IMAX\"],\"uri\":\"http://mytestdomain.movie/content/72998\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
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 ); # 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; datetime_field = field of datetime data type - for example available_time; literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.
Memfilter penelusuran media
Untuk memfilter penelusuran media menggunakan metadata, ikuti langkah-langkah berikut:
Temukan ID aplikasi Anda. Jika sudah memiliki ID aplikasi, lewati ke langkah berikutnya.
Di Google Cloud Konsol, buka halaman AI Applications.
Di halaman Apps, temukan nama aplikasi Anda dan dapatkan ID aplikasi dari kolom ID.
Tentukan kolom atau kolom dokumen yang ingin Anda filter. Misalnya, untuk dokumen di bagian Sebelum memulai, Anda dapat menggunakan kolom
categoriessebagai filter.Anda hanya dapat menggunakan kolom yang dapat diindeks dalam ekspresi filter. Untuk menentukan apakah kolom dapat diindeks, lakukan hal berikut:
Di Google Cloud Konsol, buka halaman AI Applications , lalu di menu navigasi, klik Data Stores.
Klik nama penyimpanan data Anda.
Di kolom Name, klik penyimpanan data.
Klik tab Schema untuk melihat skema penyimpanan data Anda. Jika Indexable untuk kolom adalah:
dipilih, kolom tersebut siap difilter untuk penelusuran; lewati langkah 3.
tidak dipilih , ikuti langkah 3 untuk mengaktifkan kolom untuk pengindeksan.
tidak tersedia , kolom tidak dapat diindeks.
Untuk membuat kolom, seperti kolom
categories, dapat difilter, lakukan hal berikut:Di Google Cloud Konsol, buka halaman AI Applications, lalu di menu navigasi, klik Apps.
Klik aplikasi penelusuran media Anda.
Di menu navigasi, klik Data.
Klik tab Schema. Tab ini menampilkan setelan kolom saat ini.
Klik Edit.
Jika belum dipilih, centang kotak Indexable di baris categories, lalu klik Save.
Tunggu enam jam untuk memberi waktu agar pengeditan skema Anda diterapkan. Setelah enam jam, Anda dapat melanjutkan ke langkah berikut.
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: kolom teks untuk memfilter penelusuran menggunakan ekspresi filter.
Misalnya, Anda ingin menelusuri film di bagian Sebelum memulai, dan Anda hanya ingin hasil penelusuran untuk film yang: (1) Berisi kata "avatar", dan (2) berada dalam kategori "Documentary". Anda dapat melakukannya dengan menyertakan pernyataan berikut dalam panggilan Anda:
"query": "avatar", "filter": "categories: ANY(\"Documentary\")"Untuk mengetahui informasi selengkapnya, lihat metode
search.Klik untuk melihat contoh respons.
Jika melakukan penelusuran seperti yang ada dalam prosedur sebelumnya, Anda akan mendapatkan respons yang mirip dengan berikut ini. Perhatikan bahwa respons hanya menyertakan film dokumenter Avatar.
{ "results": [ { "id": "243308", "document": { "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/243308", "id": "243308", "structData": { "categories": [ "Documentary" ], "title": "Capturing Avatar (2010)", "uri": "http://mytestdomain.movie/content/243308", "media_type": "movie" } } }, { "id": "172851", "document": { "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/172851", "id": "172851", "structData": { "categories": [ "Documentary" ], "uri": "http://mytestdomain.movie/content/172851", "media_type": "movie", "title": "Avatar: Creating the World of Pandora (2010)" } } } ], "totalSize": 2, "attributionToken": "XfBcCgwIvIzJqwYQ2_qNxwMSJDY1NzEzNmY1LTAwMDAtMmFhMy05YWU3LTE0MjIzYmIwOGVkMiIFTUVESUEqII6-nRXFy_MXnIaOIsLwnhXUsp0VpovvF6OAlyKiho4i", "guidedSearchResult": {}, "summary": {} }
Memfilter dokumen yang tersedia
Jika Anda ingin hasil penelusuran hanya menampilkan dokumen yang tersedia, Anda harus menyertakan filter untuk hal ini dalam kueri. Dokumen yang tersedia adalah dokumen yang available_time-nya di masa lalu dan expire_time-nya tidak ditentukan atau ditetapkan ke tanggal mendatang.
Filter untuk hanya menampilkan dokumen yang saat ini tersedia:
available_time <= \"DATE_TIME\" AND expire_time > \"DATE_TIME\"
Ganti DATE_TIME dengan tanggal hari ini—misalnya,
2025-04-21 atau 2025-04-21T00:00:00Z.
Filter untuk rating, orang, dan organisasi
Sintaksis filter untuk rating media, orang, dan organisasi bersifat unik dan tidak mengikuti pola di atas. Gunakan contoh dan cuplikan filter yang dapat disalin berikut untuk membuat filter bagi rating, orang, dan organisasi.
Filter akan berbeda, bergantung pada apakah Anda menggunakan skema bawaan Google atau skema kustom Anda sendiri.
Filter untuk rating, orang, dan organisasi (skema bawaan Google)
Sintaksis dan contoh untuk filter rating, orang, dan organisasi adalah sebagai berikut:
Filter berdasarkan rating: filter berdasarkan rating dari sumber tertentu.
rating(RATING_SOURCE, aggregate_ratings.rating_score) OPERATOR RATING_SCOREGanti kode berikut:
RATING_SOURCE: sumber untuk rating. Untuk skema bawaan, ini adalah nilai di kolomaggregate_ratings.rating_source.OPERATOR: salah satu operator perbandingan,<=,<,>=,>, atau=RATING_SCORE: nilai rating dalam rentang [1,5]. Untuk skema bawaan, ini adalah nilai di kolomaggregate_ratings.rating_score.
Contoh: Filter ini membatasi penelusuran ke film dengan rating IMDB lebih besar dari 2½ bintang. Nilai dalam tanda kurung di-resolve ke nilai rating IMDB:
"filter": "rating(imdb, aggregate_ratings.rating_score) > 2.5"Filter orang: filter berdasarkan nama orang untuk peran tertentu.
person(PERSONS_ROLE, persons.name): ANY NAME_STRINGGanti kode berikut:
PERSONS_ROLE: Untuk skema bawaan, ini adalah nilai di kolompersons.role(director,actor,player,team,league,editor,author,character,contributor,creator,editor,funder,producer,provider,publisher,sponsor,translator,music-by,channel, ataucustom-role).NAME_STRING: Satu atau beberapa nama orang dengan peran yang ditentukan. Untuk perintah curl, seperti di Langkah 4, tanda kutip ganda harus di-escape dengan karakter garis miring terbalik.
Contoh: Filter ini membatasi penelusuran ke film yang salah satu aktornya adalah Brad Pitt atau Kate Winslet.
filter: "person(actor, persons.name): ANY(\"Brad Pitt\", \"Kate Winslet\")"Filter organisasi: filter berdasarkan nama organisasi untuk peran tertentu.
org(ORG_ROLE, organization.name): ANY NAME_STRINGGanti kode berikut:
ORG_ROLE: Untuk skema bawaan, ini adalah nilai di kolomorganizations.role(director,actor,player,team,league,editor,author,character,contributor,creator,editor,funder,producer,provider,publisher,sponsor,translator,music-by,channel, ataucustom-role).NAME_STRING: Satu atau beberapa nama organisasi dengan peran yang ditentukan. Untuk perintah curl, seperti di Langkah 4, tanda kutip ganda harus di-escape dengan karakter garis miring terbalik.
Contoh ini membatasi penelusuran ke film yang organisasi produksinya adalah Walt Disney Studios:
filter: "org(producer, organizations.name): ANY(\"Walt Disney Studios\")"
Filter untuk rating, orang, dan organisasi (skema kustom)
Jika Anda menggunakan skema kustom, tinjau bagian skema bawaan Google, lalu contoh di bagian ini. Agar filter rating, orang, dan organisasi berfungsi dalam skema kustom, pemetaan properti harus ditetapkan dengan benar. Untuk mengetahui informasi tentang pemetaan properti, lihat Skema kustom.
| Filter | Properti yang akan dipetakan |
|---|---|
| rating | media_aggregated_ratingmedia_aggregated_rating_scoremedia_aggregated_rating_source |
| pengguna | media_personmedia_person_namemedia_person_role |
| diagram | media_organizationmedia_organization_namemedia_organization_role |
Contoh filter rating untuk skema kustom
Filter ini menelusuri film yang memiliki rating 5 bintang dari Rotten Tomatoes:
"filter": "rating(rotten_tomatoes, custom_rating.star_score) = 5"
rotten_tomatoes adalah nilai di kolom yang dipetakan ke media_aggregated_rating_source. custom_rating.star_score adalah kolom yang dipetakan ke properti kunci media_aggregated_rating.media_aggregated_rating_score.
Contoh filter organisasi untuk skema kustom
Filter ini menelusuri film yang musiknya dibuat oleh London Symphony Orchestra atau Hollywood Studio Symphony.
"filter: org(music-by, company.id): ANY (\"London Symphony Orchestra\", \"Hollywood Studio Symphony\" )
company.id adalah nama kolom yang dipetakan ke properti media_organization_name. Selain itu, music-by adalah nilai di kolom rekaman perusahaan yang dipetakan ke media_organization_role.