Menelusuri Objek Data

Tujuan Search API adalah untuk menemukan Objek Data yang mirip dengan kueri tertentu dan menampilkan daftar hasil yang diberi peringkat (berdasarkan kemiripan). Search API juga mendukung pemfilteran.

Search API menawarkan berbagai cara untuk menelusuri Objek Data: penelusuran vektor, penelusuran teks lengkap, dan penelusuran semantik. Selain itu, beberapa penelusuran dari jenis apa pun dapat digabungkan untuk mencapai penelusuran hybrid.

Penelusuran vektor memungkinkan Anda memberikan vektor kueri Anda sendiri. Ini adalah metode yang diperlukan untuk menelusuri kolom sematan yang tidak memiliki embedding-config. Jika beberapa kolom vector_search disediakan, hasil akan digabungkan menggunakan bobot yang sama.

Contoh berikut menunjukkan cara melakukan penelusuran vektor pada Koleksi dengan ID COLLECTION_ID.

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • COLLECTION_ID: ID koleksi.
  • LOCATION: Region tempat Anda menggunakan Agent Platform.
  • PROJECT_ID: Project ID Cloud de Confiance by S3NS Anda.

Metode HTTP dan URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

Meminta isi JSON:

{
  "vector_search": {
    "search_field": "plot_embedding",
    "vector": {
      "values": [
        0.42426406871192845,
        0.565685424949238,
        0.7071067811865475
      ]
    },
    "filter": {
      "genre": {
        "$eq": "Thriller"
      }
    },
    "top_k": 5,
    "output_fields": {
      "data_fields": "*",
      "vector_fields": "*",
      "metadata_fields": "*"
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "results": [
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1",
        "createTime": "2026-01-31T20:05:06Z",
        "updateTime": "2026-02-02T13:59:24Z",
        "data": {
          "year": 1991,
          "title": "The Silence of the Lambs",
          "director": "Jonathan Demme",
          "genre": "Thriller"
        },
        "vectors": {
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.697
    },
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2",
        "createTime": "2026-02-04T14:35:29Z",
        "updateTime": "2026-02-04T14:37:29Z",
        "data": {
          "year": 1995,
          "title": "Se7en",
          "director": "David Fincher",
          "genre": "Thriller"
        },
        "vectors": {
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.75
    }
  ]
}

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • SEARCH_VECTOR_FILE: Jalur lokal ke file JSON yang berisi vektor padat atau vektor renggang untuk ditelusuri.

    Contoh konten file untuk vektor padat:

    {
      "dense": {
        "values": [
          0.42426406871192845,
          0.565685424949238,
          0.7071067811865475
        ]
      }
    }

    Contoh konten file untuk vektor renggang:

    {
      "sparse": {
        "indices": [1, 5, 10],
        "values": [0.1, 0.5, 0.21]
      }
    }
  • COLLECTION_ID: ID koleksi.
  • LOCATION: Region tempat Anda menggunakan Agent Platform.
  • PROJECT_ID: Project ID Cloud de Confiance by S3NS Anda.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud vector-search collections data-objects search \
  --vector-search-field="plot_embedding" \
  --vector-from-file=SEARCH_VECTOR_FILE \
  --json-filter='{"genre": {"$eq": "Thriller"}}' \
  --top-k=5 \
  --output-data-fields='*' \
  --output-vector-fields='*' \
  --output-metadata-fields='*' \
  --collection=COLLECTION_ID \
  --location=LOCATION \
  --project=PROJECT_ID

Windows (PowerShell)

gcloud vector-search collections data-objects search `
  --vector-search-field="plot_embedding" `
  --vector-from-file=SEARCH_VECTOR_FILE `
  --json-filter='{"genre": {"$eq": "Thriller"}}' `
  --top-k=5 `
  --output-data-fields='*' `
  --output-vector-fields='*' `
  --output-metadata-fields='*' `
  --collection=COLLECTION_ID `
  --location=LOCATION `
  --project=PROJECT_ID

Windows (cmd.exe)

gcloud vector-search collections data-objects search ^
  --vector-search-field="plot_embedding" ^
  --vector-from-file=SEARCH_VECTOR_FILE ^
  --json-filter='{"genre": {"$eq": "Thriller"}}' ^
  --top-k=5 ^
  --output-data-fields='*' ^
  --output-vector-fields='*' ^
  --output-metadata-fields='*' ^
  --collection=COLLECTION_ID ^
  --location=LOCATION ^
  --project=PROJECT_ID

Anda akan melihat respons seperti berikut:

---
dataObject:
  createTime: '2026-01-31T20:05:06Z'
  data:
    director: Jonathan Demme
    genre: Thriller
    title: The Silence of the Lambs
    year: 1991
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1
  updateTime: '2026-02-02T13:59:24Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.697
---
dataObject:
  createTime: '2026-02-04T14:35:29Z'
  data:
    director: David Fincher
    genre: Thriller
    title: Se7en
    year: 1995
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2
  updateTime: '2026-02-04T14:37:29Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.75

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.1, 0.2, 0.3]},
    filter={"genre": {"$eq": "Thriller"}},
    top_k=5,
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

Menyesuaikan akurasi dan performa penelusuran

Untuk penelusuran vektor pada indeks ANN padat dengan lebih dari 100.000 embedding, Pengambilan Agen, secara default, mencoba memberikan kompromi yang optimal antara perolehan dan latensi. Anda dapat menyesuaikan keseimbangan ini untuk kasus penggunaan Anda dengan menentukan target rasio perolehan.

Nilai harus lebih besar dari atau sama dengan 0.00 dan lebih kecil dari atau sama dengan 1.00.

Untuk mengetahui informasi tentang cara membuat indeks ANN, buka Membuat Indeks ANN.

Contoh berikut menunjukkan cara melakukan penelusuran vektor pada indeks ANN padat dengan target rasio perolehan 0.95.

REST

Metode HTTP dan URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

Meminta isi JSON:

{
  "vectorSearch": {
    "searchField": "plot_embedding",
    "vector": {
      "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
    },
    "topK": 10,
    "searchHint": {
      "indexHint": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/indexes/INDEX_ID",
        "denseScannParams": {
          "targetRecall": 0.95
        }
      }
    },
    "outputFields": {
      "dataFields": "*",
      "vectorFields": "*",
      "metadataFields": "*"
    }
  }
}

gcloud

Simpan vektor kueri ke file JSON, misalnya vector.json:

{
  "dense": {
    "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
  }
}

Kemudian, jalankan perintah gcloud vector-search collections data-objects search:

gcloud vector-search collections data-objects search \
    --project=PROJECT_ID \
    --location=LOCATION \
    --collection=COLLECTION_ID \
    --vector-search-field=plot_embedding \
    --vector-from-file=vector.json \
    --use-index=INDEX_ID \
    --dense-scann-target-recall=0.95 \
    --top-k=10

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

collection = "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID"

# Set the target recall rate on the index hint
search_hint = vectorsearch_v1.SearchHint(
    index_hint=vectorsearch_v1.SearchHint.IndexHint(
        name=f"{collection}/indexes/INDEX_ID",
        dense_scann_params=vectorsearch_v1.SearchHint.IndexHint.DenseScannParams(
            target_recall=0.95,
        ),
    ),
)

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]},
    top_k=10,
    search_hint=search_hint,
    output_fields=vectorsearch_v1.OutputFields(
        data_fields=["*"],
        vector_fields=["*"],
        metadata_fields=["*"],
    ),
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent=collection,
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

Ini melakukan penelusuran teks lengkap tanpa vektor jarang. Dialek kueri "kata" default memperlakukan seluruh input sebagai istilah penelusuran individual dengan operator AND implisit. Anda dapat menyetel enhanced_query ke true untuk memperluas istilah penelusuran, menangani stemming, penghapusan stop word, dan mengizinkan operator penelusuran tambahan:

  • OR: Operator disjungsi peka huruf besar/kecil yang cocok dengan dokumen yang berisi setidaknya salah satu istilah yang ditentukan. Hal ini hanya berlaku untuk dua istilah yang berdekatan.

  • ": (tanda petik ganda) untuk penelusuran frasa.

  • -: Operator negasi. Operator ini mengecualikan dokumen yang berisi istilah apa pun yang berada sebelumnya.

Agent Retrieval text search API memungkinkan Anda mengekspresikan penelusuran teks melalui kueri terstruktur yang berisi satu atau beberapa subkueri, sehingga Anda dapat:

  • Mencocokkan dengan kolom Objek Data tertentu.

  • Tentukan jenis kecocokan yang akan dilakukan:

    • Per term, tidak peka huruf besar/kecil

    • Tepat, peka huruf besar/kecil

  • Sertakan peningkatan per bahasa untuk mencocokkan batang kata, sinonim, salah ejaan, dan kata henti (seperti "a", "an", dan "the").

  • Gunakan operator boolean AND, OR, dan NOT untuk menggabungkan subkueri.

  • Kontrol urutan evaluasi dengan mengelompokkan subkueri.

  • Meningkatkan kontribusi skor Boost untuk memengaruhi peringkat.

Ada tiga jenis subkueri:

  • Teks: Memberikan teks penelusuran dan satu atau beberapa kolom yang akan dicocokkan.

  • Unary: Menerapkan operasi NOT pada satu subkueri.

  • Gabungan: Menerapkan operator AND atau OR untuk menggabungkan subkueri, dan dapat digunakan untuk mengelompokkan subkueri gabungan lainnya guna mengontrol urutan evaluasi.

Contoh di halaman ini menggunakan Collection yang ditunjukkan dalam tabel berikut. Objek ini berisi enam Objek Data dan menentukan kolom berikut dalam skema datanya: string ID, Title, Description, dan array string Keywords.

ID Judul Deskripsi Kata kunci
1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
2 Lazy Dog Days cokelat sedang tidur. domestik, hewan peliharaan, rumah,, tenang, malas, patuh
3 Rubah vs Rubah yang cerdik mengalahkan. liar, domestik, konflik, caniformia, mamalia, interaksi
4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa
5 Kisah yang menarik melompat tinggi. licik, melompat
6 My Lazy Days of Summer Cerita pendek tentang bersantai selama liburan musim panas. musim panas, santai, liburan, matahari

Subkueri teks

Kueri teks cocok dengan satu atau beberapa kolom dalam Objek Data. Semua kueri terstruktur harus berisi setidaknya satu kueri teks.

Contoh berikut menentukan kueri teks dasar:

"text_search": {
  "structured_query": {
    "text": {
      "text": "fox vs dog"
    }
  }
}

Secara default, teks dibagi menjadi beberapa istilah, dan setiap istilah ditelusuri di kolom yang ditentukan. Dalam contoh sebelumnya, istilah "fox", "vs", dan "dog" ditelusuri di kolom Title.

Kueri teks memiliki parameter opsional berikut:

  • fields: Array kolom yang akan dicocokkan. Jika tidak ditentukan, defaultnya adalah mencocokkan semua kolom. Kolom dicocokkan dengan operator OR implisit.

  • match_type: Jenis kecocokan yang akan dilakukan. Jenis pencocokan dapat berupa EXACT, yang menentukan bahwa kolom harus cocok dengan teks penelusuran secara persis. Jika kolom adalah array string, kecocokan dilakukan terhadap elemen apa pun dalam array.

  • enhancement: Menentukan enabled dan languageCode, sehingga memungkinkan kecocokan dilakukan terhadap sinonim, batang kata, salah eja, dan kata henti dalam bahasa yang ditentukan untuk languageCode (misalnya, en-US). Defaultnya adalah tidak ada peningkatan.

  • boost: Opsional. Pengali yang akan diterapkan pada skor kueri. Defaultnya adalah 1.0.

Jenis pencocokan

Parameter match_type menentukan cara teks penelusuran cocok dengan nilai kolom.

Nilai parameter dapat berupa:

  • EXACT: Kolom harus sama persis dengan istilah kueri. Jika kolom adalah array string, kecocokan akan dilakukan terhadap elemen apa pun dalam array.

Contoh berikut menentukan jenis pencocokan EXACT:

"text_search": {
  "structured_query": {
    "text": {
      "text": "Fox vs Dog",
      "fields": [ "Title" ],
      "match_type": "EXACT"
    }
  }
}

Jenis kecocokan untuk array string

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
1,0000 3 Rubah vs Rubah yang cerdik mengalahkan. liar, domestik, konflik, caniformia, mamalia, interaksi

Jika kolom adalah array string, teks penelusuran akan dicocokkan dengan elemen array apa pun.

Contoh berikut menunjukkan cara menelusuri teks persis wild dalam array string Keywords:

"text_search": {
  "structured_query": {
    "text": {
      "text": "wild",
      "fields": [ "Keywords" ],
      "match_type": "EXACT"
    }
  }
}

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
1,0000 3 Rubah vs Rubah yang cerdik mengalahkan. liar, domestik, konflik, caniformia, mamalia, interaksi
1,0000 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa
1,0000 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator

Peningkatan kueri

Kueri penelusuran dapat menyertakan parameter queryEnhancement opsional untuk menentukan peningkatan khusus bahasa. Hal ini mencakup pencocokan terhadap sinonim, batang kata (misalnya, batang kata "lompat" "melompat"), ejaan yang salah, dan kata henti (seperti "sebuah", "seekor", dan "itu").

Parameter adalah objek dengan properti berikut:

  • enabled: Boolean yang menentukan apakah akan mengaktifkan peningkatan.

  • languageCode: String yang menentukan bahasa untuk peningkatan (misalnya, en-US).

Contoh berikut mengaktifkan peningkatan untuk bahasa en-US:

"text_search": {
  "structured_query": {
    "text": {
      "text": {
        "text": "jump",
        "fields": [ "Description" ],
        "queryEnhancement": {
          "enabled": true,
          "languageCode": "en-US"
        }
      }
    }
  }
}

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
0,3419 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
0,3419 5 Kisah yang menarik melompat tinggi. licik, melompat

Jika queryEnhancement tidak ditentukan atau enabled adalah false, tidak akan ada kecocokan.

Subkueri gabungan

Kueri gabungan menerapkan operasi boolean ke dua subkueri atau lebih. Operasi yang didukung adalah AND dan OR.

Kueri gabungan memiliki properti berikut:

  • op: Operator boolean yang akan diterapkan ke subkueri. Nilainya dapat berupa AND atau OR.

  • subQueries: Array subkueri yang akan digabungkan. Kueri ini dapat berupa salah satu jenis subkueri yang didukung, termasuk kueri gabungan lainnya. Ada kedalaman bertingkat maksimum 2.

    • boost: Opsional. Pengali yang akan diterapkan pada skor kueri. Defaultnya adalah 1.0.

Konjungsi (Conjunction) (AND)

Operator AND mencocokkan Objek Data yang berisi istilah dari semua subkueri.

Contoh berikut menunjukkan cara menggabungkan tiga kueri teks menggunakan operator AND:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

Dalam contoh ini, kecocokan hanya dibuat jika ketiga subkueri cocok.

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
5,0587 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa
5,0587 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator

Jika subkueri teks memiliki beberapa kolom yang akan dicocokkan, OR implisit akan diterapkan, seperti yang ditunjukkan dalam contoh berikut:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

Dalam contoh sebelumnya:

  • Subkueri pertama cocok dengan istilah yang tidak peka huruf besar/kecil Brown di kolom Title atau Description.

  • Subkueri kedua mencocokkan istilah quick yang tidak peka huruf besar/kecil di kolom Description.

  • Subkueri ketiga cocok dengan istilah yang tidak peka huruf besar/kecil forest dan predator dalam nilai apa pun di kolom array string Keywords.

  • Jika ketiga subkueri cocok, kecocokan akan dibuat pada kueri gabungan.

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
6,3176 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
5,0587 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa

Disjungsi (OR)

Operator OR mencocokkan Objek Data yang berisi istilah dari setidaknya salah satu subkueri.

Contoh berikut menunjukkan cara menggabungkan tiga kueri teks menggunakan operator OR:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

Dalam contoh, kecocokan dibuat jika salah satu dari tiga subkueri cocok.

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
6,3176 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
5,0587 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa

Pengelompokan

Subkueri gabungan dapat disarangkan dalam subkueri gabungan lain untuk mengontrol urutan evaluasi.

Contoh berikut menunjukkan cara mengelompokkan subkueri:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "combine": {
            "op": "OR",
            "subQueries": [
              {
                "text": {
                  "text": "Fox",
                  "fields": [ "Title" ]
                }
              },
              {
                "text": {
                  "text": "jumps",
                  "fields": [ "Description" ]
                }
              }
            ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "domestic",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

Contoh sebelumnya setara dengan berikut ini: (Fox yang tidak peka huruf besar/kecil di Title OR jumps yang tidak peka huruf besar/kecil di Description) AND NOT domestic yang tidak peka huruf besar/kecil di salah satu elemen Keywords.

Tabel berikut menunjukkan hasil kueri:

Skor ID Judul Deskripsi Kata kunci
3.5178 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
2,2589 5 Kisah yang menarik melompat tinggi. licik, melompat

Subkueri unary

Subkueri unary menerapkan operasi boolean ke satu subkueri dalam kueri terstruktur. Operator NOT adalah satu-satunya operasi unary yang didukung.

Kueri unary memiliki properti berikut:

  • op: Operator boolean yang akan diterapkan ke subkueri. Nilainya dapat berupa NOT.

  • subQuery: Subkueri untuk menerapkan operasi unary.

    • boost: Opsional. Pengali yang akan diterapkan pada skor kueri. Defaultnya adalah 1.0.

Negasi (NOT)

Operator NOT mencocokkan Objek Data yang tidak berisi istilah subkueri.

Contoh berikut menunjukkan cara menggunakan operator NOT:

"text_search": {
  "structured_query": {
    "unary": {
      "op": "NOT",
      "subQuery": {
        "text": {
          "text": "dog",
          "fields": [ "Description" ]
        }
      }
    }
  }
}

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
1.000 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa
1.000 6 My Lazy Days of Summer Cerita pendek tentang bersantai selama liburan musim panas. musim panas, santai, liburan, matahari

Jika diterapkan ke array string, operator NOT akan mencocokkan Objek Data jika istilah tidak terdapat dalam elemen array mana pun.

Dalam contoh, kecocokan dibuat jika istilah orange yang tidak peka huruf besar/kecil tidak terkandung dalam elemen apa pun dari array string Keywords.

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "orange",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
6,0587 4 Beruang Cokelat Gerakan cepat di hutan. liar, hutan, beruang, predator puncak, hibernasi, raksasa

Meningkatkan

Subkueri apa pun dapat memiliki parameter boost untuk menerapkan pengganda ke skor subkueri. Secara default, semua subkueri memiliki boost 1.0.

Contoh berikut menunjukkan cara meningkatkan subkueri:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "fox",
            "fields": [ "Title" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "jumps",
            "fields": [ "Description" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "interaction",
            "fields": [ "Keywords" ]
          },
          "boost": 5.0
        }
      ]
    }
  }
}

Hasil kueri ditampilkan dalam tabel berikut:

Skor ID Judul Deskripsi Kata kunci
7,5534 3 Rubah vs Rubah yang cerdik mengalahkan. liar, domestik, konflik, caniformia, mamalia, interaksi
2,5178 1 The Quick Brown Fox Seekor rubah cokelat dengan mudah melompati seekor malas. liar, hutan, mamalia, oranye, kelincahan, predator
1,2589 5 Kisah yang menarik melompat tinggi. licik, melompat

Penelusuran ini mengonversi kueri teks Anda menjadi embedding untuk menemukan hasil berdasarkan makna semantik. Model ini menggunakan embedding-config yang ditentukan dalam skema Anda untuk membuat sematan kueri. Jika beberapa kolom vector_search diberikan, hasil digabungkan menggunakan bobot yang sama.

Gunakan batch_search_data_objects untuk menjalankan beberapa penelusuran secara paralel (penelusuran vektor, penelusuran teks, dan penelusuran semantik). Hasil dapat digabungkan dan diberi peringkat menggunakan Peringkat ReciprocalRankFusion, yang menggabungkan set hasil menggunakan algoritma Reciprocal Rank Fusion (RFF).