Memfilter penelusuran media

Jika memiliki aplikasi penelusuran media, Anda dapat menggunakan metadata untuk memfilter kueri penelusuran. Halaman ini menjelaskan cara menggunakan kolom metadata untuk membatasi penelusuran Anda ke kumpulan dokumen tertentu.

Sebelum memulai

Pastikan Anda telah membuat aplikasi media dan penyimpanan data serta menyerap data. Untuk mengetahui informasi selengkapnya, lihat Membuat penyimpanan data media dan Membuat aplikasi media.

Contoh dokumen

Tinjau contoh dokumen media ini. Anda dapat merujuk kembali ke bagian tersebut 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 dirangkum oleh 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 contains 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.

Untuk memfilter penelusuran media menggunakan metadata, ikuti langkah-langkah berikut:

  1. Temukan ID penyimpanan data Anda. Jika Anda sudah memiliki ID penyimpanan data, lanjutkan ke langkah berikutnya.

    1. Di konsol Google Cloud, buka halaman Agent Builder dan di menu navigasi, klik Data Stores.

      Buka halaman Data Store

    2. Klik nama penyimpanan data Anda.

    3. Di halaman Data untuk penyimpanan data Anda, dapatkan ID penyimpanan data.

  2. Tentukan kolom dokumen yang ingin Anda filter. Misalnya, untuk dokumen di Sebelum memulai, Anda dapat menggunakan kolom categories sebagai filter.

    Anda hanya dapat menggunakan kolom yang dapat diindeks dalam ekspresi filter. Untuk menentukan apakah kolom dapat diindeks, lakukan hal berikut:

    1. Di konsol Google Cloud, buka halaman Agent Builder dan di menu navigasi, klik Data Stores.

      Buka halaman Data Store

    2. Klik nama penyimpanan data Anda.

    3. Di kolom Nama, klik penyimpanan data.

    4. Klik tab Schema untuk melihat skema penyimpanan data Anda. Jika Dapat Diindeks untuk kolom adalah:

      • Memilih , lalu kolom tersebut siap difilter untuk penelusuran; lewati langkah 3.

      • tidak dipilih, lalu ikuti langkah 3 untuk mengaktifkan kolom agar dapat diindeks.

      • tidak tersedia, kolom tidak dapat diindeks.

  3. Untuk membuat kolom, seperti kolom categories, dapat difilter, lakukan hal berikut:

    1. Di konsol Google Cloud, buka halaman Agent Builder, dan di menu navigasi, klik Apps.

      Buka halaman Aplikasi

    2. Klik aplikasi penelusuran media Anda.

    3. Di menu navigasi, klik Data.

    4. Klik tab Schema. Tab ini menampilkan setelan kolom saat ini.

    5. Klik Edit.

    6. Jika belum dipilih, centang kotak Indexable di baris categories, lalu klik Save.

    7. Tunggu enam jam agar pengeditan skema Anda diterapkan. Setelah enam jam, Anda dapat melanjutkan ke langkah berikut.

  4. Mendapatkan hasil penelusuran.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "filter": "FILTER"
    }'
    
    • PROJECT_ID: ID project Anda.
    • DATA_STORE_ID: ID penyimpanan data Anda.
    • QUERY: Teks kueri yang akan ditelusuri.
    • FILTER: Kolom teks untuk memfilter penelusuran menggunakan ekspresi filter.

    Misalnya, Anda ingin menelusuri film di bagian Sebelum mulai, dan Anda hanya ingin hasil penelusuran untuk film yang: (1) Berisi kata "avatar", dan (2) berada dalam kategori "Dokumentari". Anda dapat melakukannya dengan menyertakan pernyataan berikut dengan panggilan Anda:

    "query": "avatar",
    "filter": "categories: ANY(\"Documentary\")"
    

    Untuk 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 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": {}
    }