Membuat antarmuka penelusuran dengan Query API

Query API memberikan fungsi penelusuran dan menyarankan metode untuk membuat antarmuka penelusuran atau menyematkan hasil penelusuran dalam aplikasi.

Untuk aplikasi web dengan persyaratan minimum, pertimbangkanlah untuk menggunakan widget penelusuran. Untuk mengetahui informasi selengkapnya, lihat Membuat antarmuka penelusuran dengan widget penelusuran

Membuat antarmuka penelusuran

Ada beberapa langkah untuk membuat antarmuka penelusuran yang minimal:

  1. Mengonfigurasi aplikasi penelusuran
  2. Buat kredensial OAuth untuk aplikasi
  3. Buat kueri indeks
  4. Tampilkan hasil kueri

Anda dapat menyempurnakan antarmuka penelusuran dengan berbagai fitur, seperti paging, pengurutan, pemfilteran, faset, dan saran otomatis.

Mengonfigurasi aplikasi penelusuran

Anda harus membuat setidaknya satu aplikasi penelusuran untuk dikaitkan dengan setiap antarmuka penelusuran yang dibuat. Aplikasi penelusuran memberikan parameter default untuk kueri, seperti sumber data yang akan digunakan, tata urutan, filter, dan faset yang akan diminta. Jika perlu, Anda dapat mengganti parameter ini menggunakan Query API.

Untuk mengetahui informasi selengkapnya tentang aplikasi penelusuran, lihat Menyesuaikan pengalaman penelusuran di Cloud Search.

Buat kredensial OAuth untuk aplikasi

Selain langkah-langkah dalam Mengonfigurasi akses ke Google Cloud Search API, Anda juga harus membuat kredensial OAuth untuk aplikasi web. Jenis kredensial yang dibuat bergantung pada konteks tempat penggunaan API.

Gunakan kredensial untuk meminta otorisasi atas nama pengguna. Gunakan cakupan https://www.googleapis.com/auth/cloud_search.query saat meminta otorisasi.

Untuk informasi tambahan tentang opsi OAuth dan library klien, lihat [Google Identity Platform](https://developers.google.com/identity/choose-auth{: .external target="_blank"}.

Buat kueri indeks

Gunakan metode search untuk melakukan penelusuran terhadap indeks.

Setiap permintaan harus menyertakan dua informasi: teks query untuk mencocokkan item dan searchApplicationId yang mengidentifikasi ID untuk aplikasi penelusuran yang akan digunakan.

Cuplikan berikut menampilkan kueri ke sumber data film untuk film Titanic:

{
  "query": "titanic",
  "requestOptions": {
    "searchApplicationId": "searchapplications/<search_app_id>"
  },
}

Menampilkan hasil kueri

Setidaknya, antarmuka penelusuran diharapkan menampilkan item title serta link ke item asli. Anda dapat menyempurnakan tampilan hasil penelusuran dengan memanfaatkan informasi tambahan yang ada dalam hasil penelusuran, seperti cuplikan dan metadata.

Menangani hasil tambahan

Secara default, Cloud Search menampilkan hasil tambahan jika hasil yang ditampilkan tidak memadai untuk kueri pengguna. Kolom queryInterpretation dalam respons menunjukkan kapan hasil tambahan ditampilkan. Jika hanya hasil tambahan yang ditampilkan, InterpretationType ditetapkan ke REPLACE. Jika beberapa hasil untuk kueri asli ditampilkan beserta hasil tambahan, InterpretationType ditetapkan ke BLEND. Dalam kedua kasus tersebut QueryInterpretation.Reason = NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY.

Jika beberapa hasil tambahan ditampilkan, sebaiknya berikan teks yang menunjukkan hasil tambahan telah ditampilkan. Misalnya, dalam kasus REPLACE, Anda mungkin menampilkan string "Penelusuran untuk kueri asli Anda tidak cocok dengan hasil apa pun. Menampilkan hasil untuk kueri serupa”.

Dalam kasus BLEND, Anda mungkin menampilkan string "Penelusuran Anda untuk kueri asli tidak cocok dengan hasil yang cukup. Termasuk juga hasil untuk kueri-kueri serupa."

Menangani hasil penelusuran pengguna

Cloud Search menampilkan dua jenis "hasil orang": dokumen yang terkait dengan orang yang namanya digunakan dalam kueri dan informasi karyawan untuk orang yang namanya digunakan dalam kueri. Jenis hasil yang terakhir adalah fungsi fitur Penelusuran Orang di Cloud Search, dan hasil untuk kueri semacam itu dapat ditemukan di kolom structuredResults dari respons API kueri:

{
  "results": [...],
  "structuredResults": [{
    "person": {...}
  }]
}

Pencocokan Laporan Langsung

Pencocokan Laporan Langsung adalah fitur Penelusuran Orang di Cloud Search, yang memungkinkan pengguna melihat laporan langsung dari seseorang di organisasi mereka. Hasilnya tersedia dalam kolom structuredResults.

Untuk kueri tentang manajer atau bawahan langsung seseorang, responsnya memiliki assistCardProtoHolder dalam structuredResults. assistCardProtoHolder memiliki kolom bernama cardType yang akan sama dengan RELATED_PEOPLE_ANSWER_CARD. assistCardProtoHolder berisi kartu yang disebut relatedPeopleAnswerCard, yang berisi respons sebenarnya. Kueri ini berisi subject (orang yang disertakan dalam kueri) dan relatedPeople yang merupakan kumpulan orang yang terkait dengan subjek. Kolom relationType menampilkan nilai MANAGER atau DIRECT_REPORTS.

Kode berikut menunjukkan contoh respons untuk kueri yang cocok dengan laporan langsung:

{
  "results": [],
  "structuredResults": [{
    "assistCardProtoHolder": {
      "extensions": {
        "@type": "type.googleapis.com/enterprise.topaz.sidekick.AssistCardProto",
        "cardMetadata": {
          "cardCategory": "ANSWER"
        },
        "cardType": "RELATED_PEOPLE_ANSWER_CARD",
        "relatedPeopleAnswerCard": {
          "subject": {
            "email": "AdamStanford@psincs-test01.newjnj.com",
            "displayName": "Adam Stanford"
            "manager": {
              "email": "simonsais@psincs-test01.newjnj.com"
            }
          },
          "relatedPeople": [{
            "email": "EdgarMountainRamirez@psincs-test01.newjnj.com",
            "displayName": "Edgar Mountain Ramirez"
          }, {
            "email": "FranciscoJoseMartinez@psincs-test01.newjnj.com",
            "displayName": "Francisco Jose Martinez"
          }],
          "relationType": "DIRECT_REPORTS",
        }
      }
    }
  }]
}

Menonaktifkan pengoptimalan, termasuk hasil tambahan

Secara default, pengoptimalan, seperti hasil tambahan, diaktifkan. Namun, Anda dapat menonaktifkan semua pengoptimalan atau hanya hasil tambahan di tingkat aplikasi penelusuran dan kueri:

Menyoroti cuplikan

Untuk item yang ditampilkan berisi teks terindeks atau konten HTML, cuplikan dari konten akan ditampilkan. Konten ini membantu pengguna menentukan relevansi item yang ditampilkan.

Jika istilah kueri ada dalam cuplikan, satu atau beberapa rentang kecocokan yang mengidentifikasi lokasi istilah juga akan ditampilkan.

Gunakan matchRanges untuk menandai teks yang cocok saat merender hasil. Contoh JavaScript berikut mengonversi cuplikan cuplikan menjadi markup HTML dengan setiap rentang yang cocok digabungkan dalam tag <span>.

function highlightSnippet(snippet) {
  let text = snippet.snippet;
  let formattedText = text;
  if (snippet.matchRanges) {
    let parts = [];
    let index = 0;
    for (let match of snippet.matchRanges) {
      let start = match.start || 0; // Default to 0 if omitted
      let end = match.end;
      if (index < start) { // Include any leading text before/between ranges
        parts.push(text.slice(index, start));
      }
      parts.push('<span class="highlight">');
      parts.push(text.slice(start, end));
      parts.push('</span>');
      index = end;
    }
    parts.push(text.slice(index)); // Include any trailing text after last range
    formattedText = parts.join('');
  }
  return formattedText;
}

Jika cuplikannya adalah berikut ini:

{
  "snippet": "This is an example snippet...",
  "matchRanges": [
    {
      "start": 11,
      "end": 18
    }
  ]
}

String HTML yang dihasilkan adalah:

This is an <span class="highlight">example</span> snippet...

Menampilkan metadata

Gunakan kolom metadata untuk menampilkan informasi tambahan tentang item yang ditampilkan yang mungkin relevan bagi pengguna. Kolom metadata mencakup createTime dan updateTime item serta data terstruktur yang dapat ditampilkan yang terkait dengan item tersebut.

Untuk menampilkan data terstruktur, gunakan kolom displayOptions. Kolom displayOptions berisi label tampilan untuk jenis objek dan kumpulan metalines. Setiap metaline adalah array label tampilan dan pasangan nilai seperti yang dikonfigurasi dalam skema.

Mengambil hasil tambahan

Untuk mengambil hasil tambahan, tetapkan kolom start dalam permintaan ke offset yang diinginkan. Anda dapat menyesuaikan ukuran setiap halaman dengan kolom pageSize.

Untuk menampilkan jumlah item yang ditampilkan atau untuk menampilkan kontrol paging ke halaman melalui item yang ditampilkan, gunakan kolom resultCount. Bergantung pada ukuran kumpulan hasil, nilai aktual atau nilai estimasi akan diberikan.

Urutkan hasil

Gunakan kolom sortOptions untuk menentukan urutan item yang ditampilkan. Nilai sortOptions adalah objek dengan dua kolom:

  • operatorName — operator untuk properti data terstruktur yang akan diurutkan. Untuk properti yang memiliki beberapa operator, Anda hanya dapat mengurutkan menggunakan operator kesetaraan utama.
  • sortOrder — arah pengurutan, ASCENDING atau DESCENDING.

Relevansi juga digunakan sebagai kunci pengurutan sekunder. Jika tidak ada tata urutan yang ditentukan dalam kueri, hasil akan diurutkan hanya berdasarkan relevansi.

"sortOptions": {
  "operatorName": "priority",
  "sortOrder": "DESCENDING"
}

Menambahkan filter

Selain ekspresi kueri, Anda juga dapat membatasi hasil dengan menerapkan filter. Anda dapat menentukan filter di aplikasi penelusuran dan di permintaan penelusuran.

Untuk menambahkan filter dalam permintaan atau aplikasi penelusuran, tambahkan filter di kolom dataSourceRestrictions.filterOptions[].

Ada dua cara utama untuk memfilter sumber data lebih lanjut:

  • Filter objek, melalui properti filterOptions[].objectType — membatasi item yang cocok dengan jenis yang ditentukan seperti yang ditetapkan dalam skema kustom.
  • Filter nilai - membatasi item yang cocok berdasarkan operator kueri dan nilai yang diberikan.

Filter komposit memungkinkan menggabungkan beberapa filter nilai ke dalam ekspresi logis untuk kueri yang lebih kompleks.

Dalam contoh skema film, Anda dapat menerapkan batasan usia berdasarkan pengguna saat ini dan membatasi film yang tersedia berdasarkan rating MPAA.

{
  "query": "adventure",
  "requestOptions": {
    "searchApplicationId": "<search_app_id>"
  },
  "dataSourceRestrictions": [
    {
      "source": {
        "name": "datasources/<data_source_id>"
      },
      "filterOptions": [
        {
          "objectType": "movie",
          "filter": {
            "compositeFilter": {
              "logicOperator": "AND"
              "subFilters": [
                {
                  "compositeFilter": {
                  "logicOperator": "OR"
                  "subFilters": [
                    {
                      "valueFilter": {
                        "operatorName": "rated",
                        "value": {
                          "stringValue": "G"
                        }
                      }
                    },
                    {
                      "valueFilter": {
                        "operatorName": "rated",
                        "value": {
                          "stringValue": "PG"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  ]
}

Menyaring hasil dengan faset

Faset adalah properti terindeks yang merepresentasikan kategori untuk menyaring hasil penelusuran. Gunakan faset untuk membantu pengguna menyaring kueri secara interaktif dan menemukan item yang relevan dengan lebih cepat.

Faset dapat ditentukan dalam aplikasi penelusuran Anda dan diganti oleh setelan dalam kueri Anda.

Saat meminta faset, Cloud Search menghitung nilai yang paling sering digunakan untuk properti yang diminta di antara item yang cocok. Nilai-nilai ini ditampilkan dalam respons. Gunakan nilai-nilai ini untuk membuat filter yang mempersempit hasil pada kueri berikutnya.

Pola interaksi standar dengan faset adalah:

  1. Membuat kueri awal yang menentukan properti yang akan disertakan dalam hasil faset.
  2. Melakukan render hasil penelusuran dan faset.
  3. Pengguna memilih satu atau beberapa nilai faset untuk menyaring hasilnya.
  4. Mengulangi kueri dengan filter berdasarkan nilai yang dipilih.

Misalnya, untuk mengaktifkan penyaringan kueri film berdasarkan tahun dan rating MPAA, sertakan properti facetOptions dalam kueri.

"facetOptions": [
  {
    "sourceName": "datasources/<data_source_id>",
    "operatorName": "year"
  },
  {
    "sourceName": "datasources/<data_source_id>",
    "operatorName": "rated"
  }
]

Hasil facet dengan kolom berbasis bilangan bulat

Anda juga dapat membagi hasil permintaan dengan kolom berbasis bilangan bulat. Misalnya, Anda dapat menandai properti bilangan bulat yang disebut book_pages sebagai dapat ditampilkan untuk menyaring hasil penelusuran tentang buku dengan halaman "100-200".

Saat Anda menyiapkan skema kolom properti bilangan bulat, tetapkan isFacetable ke true dan tambahkan opsi bucketing yang sesuai ke integerPropertyOptions. Hal ini memastikan bahwa setiap properti facetable integer memiliki opsi bucketing default yang ditentukan.

Saat menentukan logika opsi bucket, sediakan array nilai inkremental yang menandakan rentang. Misalnya, jika pengguna akhir menentukan rentang sebagai 2, 5, 10, 100, faset untuk <2, [2-5), [5-10), [10-100), >=100 akan dihitung.

Anda dapat mengganti faset berbasis bilangan bulat dengan menentukan opsi bucketing yang sama ke facetOptions dalam permintaan. Jika diperlukan, Cloud Search akan menggunakan opsi bucketing yang ditentukan dalam skema ketika aplikasi penelusuran atau permintaan kueri tidak memiliki opsi faset yang ditentukan. Faset yang ditentukan dalam kueri lebih diutamakan daripada faset yang ditentukan dalam aplikasi penelusuran, dan faset yang ditentukan dalam aplikasi penelusuran lebih diutamakan daripada faset yang ditentukan dalam skema.

Membedakan hasil menurut ukuran atau tanggal dokumen

Anda dapat menggunakan operator yang dicadangkan untuk menyaring hasil penelusuran berdasarkan ukuran file dokumen, yang diukur dalam byte, atau berdasarkan waktu dokumen dibuat atau diubah. Anda tidak perlu menetapkan skema kustom, tetapi Anda perlu menentukan nilai operatorName di FacetOptions aplikasi penelusuran Anda.

  • Untuk facet menurut ukuran dokumen, gunakan itemsize dan tentukan opsi bucketing.
  • Untuk facet menurut tanggal pembuatan dokumen, gunakan createddatetimestamp.
  • Untuk facet menurut tanggal modifikasi dokumen, gunakan lastmodified.

Menafsirkan bucket faset

Properti facetResults dalam respons kueri penelusuran menyertakan permintaan filter persis pengguna di kolom filter untuk setiap bucket.

Untuk faset yang tidak didasarkan pada bilangan bulat, facetResults menyertakan entri untuk setiap properti yang diminta. Untuk setiap properti, daftar nilai atau rentang, yang disebut buckets, disediakan. Nilai yang paling sering digunakan akan muncul terlebih dahulu.

Saat pengguna memilih satu atau beberapa nilai untuk difilter, buat kueri baru dengan filter yang dipilih dan buat kueri API lagi.

Menambahkan saran

Gunakan API saran untuk memberikan penyelesaian otomatis untuk kueri yang didasarkan pada histori kueri pribadi pengguna, serta kontak dan korpus dokumen mereka.

Misalnya, panggilan berikut memberi saran untuk frasa sebagian jo.

{
  "query": "jo",
  "requestOptions": {
    "searchApplicationId": "<search_app_id>",
    "peoplePhotoOptions": {
      "peoplePhotoUrlSizeInPx": 32
    },
    "timeZone": "America/Denver"
  }
}

Anda kemudian dapat menampilkan saran yang dihasilkan sesuai kebutuhan aplikasi Anda.