Memfilter penelusuran umum untuk data terstruktur atau tidak terstruktur

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.

Sebelum memulai

Pastikan Anda telah membuat aplikasi dan menyerap data terstruktur, atau data tidak terstruktur dengan metadata. Untuk mengetahui informasi selengkapnya, lihat Membuat aplikasi penelusuran.

Contoh metadata

Tinjau contoh metadata ini 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.

Menelusuri menggunakan filter metadata

Untuk menelusuri menggunakan filter metadata, ikuti langkah-langkah berikut:

  1. Tentukan kolom metadata yang akan digunakan untuk memfilter kueri penelusuran Anda. Misalnya, untuk metadata di Sebelum memulai, Anda dapat menggunakan kolom category sebagai filter penelusuran. Pengguna dapat memfilter berdasarkan persona_A, persona_B, atau persona_C, sehingga penelusuran mereka dibatasi untuk dokumen yang terkait dengan persona yang mereka minati.

  2. Buat kolom metadata dapat diindeks:

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

      Buka halaman Aplikasi

    2. Klik aplikasi penelusuran Anda.

    3. Di menu navigasi, klik Data.

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

    5. Klik Edit.

    6. Centang kotak Dapat diindeks untuk kolom yang ingin Anda buat dapat diindeks.

    7. Klik Simpan. Untuk informasi selengkapnya, lihat Mengonfigurasi setelan kolom.

  3. 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.

  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: Opsional. Kolom teks yang memungkinkan Anda memfilter berdasarkan kumpulan kolom yang ditentukan, 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 mengkueri dokumen dengan nilai category persona_A. Anda dapat melakukannya dengan menyertakan pernyataan berikut dengan panggilan Anda:

    "query": "claims",
    "filter": "category: ANY(\"persona_A\")"
    

    Untuk 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 akan mendapatkan respons yang mirip dengan berikut ini. Perhatikan bahwa respons menyertakan tiga dokumen yang memiliki nilai category persona_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\" boolean non-smoking bernilai benar
pet-friendly = \"false\" boolean pet-friendly bernilai salah
manufactured_date = \"2023\" manufactured date adalah kapan saja pada tahun 2023
manufactured_date >= \"2024-04-16\" manufactured_date pada atau setelah 16 April 2024
manufactured_date < \"2024-04-16T12:00:00-07:00\" manufactured_date sebelum tengah hari 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 Amphitheatre 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 selanjutnya