Firebase Data Connect mendukung penelusuran teks lengkap, yang didukung oleh PostgreSQL. Penelusuran teks lengkap memungkinkan Anda menemukan informasi dengan cepat dan efisien dalam set data besar dengan menelusuri kata kunci dan frasa di beberapa kolom sekaligus.
Anda dapat menambahkan penelusuran teks lengkap ke layanan Anda. Pertama, tambahkan direktif @searchable
ke String
dalam skema yang ingin Anda telusuri. Misalnya:
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
Setelah menambahkan direktif ini, Anda dapat melakukan penelusuran teks lengkap dengan menambahkan
kolom <pluralType>_search
ke kueri. Dalam hal ini, nilainya adalah
movies_search
:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Menyesuaikan hasil penelusuran teks lengkap
Anda dapat menyempurnakan hasil penelusuran teks lengkap dengan menambahkan argumen ke
direktif @searchable
dan kolom _search
;
Argumen bersama
Anda dapat mengontrol hasil penelusuran dengan banyak argumen yang sama yang digunakan untuk kolom daftar
dasar <pluralType>
:
order
memungkinkan Anda mengubah urutan hasil. Jika tidak ada, hasil akan diurutkan berdasarkan relevansi menurun.where
memungkinkan Anda menambahkan filter tambahan untuk penelusuran (misalnya, menelusuri hanya film bergenre tertentu).limit
membuat kueri hanya menampilkan X hasil teratas.offset
membuat kueri melewati X hasil pertama.distinct
menambahkan operator DISTINCT ke SQL yang dihasilkan.
Pilihan bahasa
Secara default, penelusuran teks lengkap mengurai dokumen dalam bahasa Inggris. Anda dapat mengubahnya
dengan argumen bahasa pada direktif @searchable
:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Menentukan bahasa yang tepat akan memungkinkan PostgreSQL melakukan stemming leksikal yang akurat dan membantu memastikan bahwa penelusuran Anda tidak melewatkan hasil yang relevan. Jika Anda menelusuri beberapa kolom, semuanya harus ditetapkan ke bahasa yang sama.
Languages | ||
---|---|---|
|
|
|
Dengan menggunakan psql
, Anda bisa mendapatkan daftar lengkap dengan kueri berikut.
SELECT cfgname FROM pg_ts_config;
Format kueri
Secara default, penelusuran teks lengkap menggunakan semantik web untuk kueri (mirip dengan penelusuran Google). Anda dapat mengubah perilaku ini dengan argumen queryFormat
di
kolom <pluralType>_search
.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Ada empat opsi untuk format kueri:
- QUERY memberikan semantik yang sudah dikenal ke mesin telusur web (misalnya, string yang dikutip, AND, dan OR). Ini adalah defaultnya.
- POLOS cocok dengan semua kata, tetapi tidak harus bersama-sama ("anjing cokelat" akan cocok dengan "anjing cokelat dan putih" atau "anjing putih dan cokelat").
- PHRASE mencocokkan frasa yang tepat ( "brown dog" akan cocok dengan "the white and brown dog", tetapi tidak akan cocok dengan "brown and white dog").
- LANJUTAN memungkinkan Anda membuat kueri kompleks menggunakan set lengkap operator tsquery.
Nilai minimum relevansi
Menetapkan nilai minimum relevansi berarti penelusuran Anda hanya akan menampilkan hasil yang memiliki nilai relevansi di atas nilai tertentu. Dalam banyak kasus, Anda tidak perlu menyetelnya - hasil apa pun yang memiliki relevansi lebih besar dari 0 akan menjadi hasil yang relevan.
Namun, jika Anda mendapati bahwa penelusuran Anda menampilkan hasil yang terasa tidak relevan, Anda dapat memfilter hasil tersebut menggunakan nilai minimum relevansi.
Untuk mengetahui nilai yang sesuai untuk nilai minimum relevansi, Anda harus melakukan
beberapa penelusuran pengujian dan melihat _metadata.relevance
:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Pilih nilai minimum yang akan menghilangkan hasil yang menurut Anda tidak relevan. Untuk melakukannya:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Memilih antara penelusuran teks lengkap, penelusuran kemiripan vektor, dan filter pola string
Data Connect menawarkan beberapa cara untuk menelusuri database Anda.
Gunakan tabel ini untuk membantu Anda memilih yang tepat untuk kasus penggunaan Anda.
Penelusuran teks lengkap | Penelusuran kemiripan vektor | Filter pola string |
---|---|---|
Cocok untuk menerapkan fungsi penelusuran umum | Baik untuk menemukan baris yang mirip secara semantik (misalnya, rekomendasi atau 'Lebih seperti ini') | Cocok untuk pencocokan teks persis atau penelusuran ekspresi reguler |
Melakukan stemming leksikal, yang membantu mencocokkan berbagai bentuk atau kala dari kata yang sama | Memerlukan Vertex AI | Menggunakan ruang disk dan memori paling sedikit, karena tidak memerlukan indeks atau kolom yang dihasilkan |
Dapat dilakukan di beberapa kolom dalam tabel | Hanya berfungsi untuk satu kolom dalam satu waktu | Dapat dilakukan di beberapa kolom dalam tabel menggunakan filter OR |
Performa yang baik pada dokumen yang lebih besar | Performa yang baik pada dokumen besar | Performa kurang baik saat menelusuri dokumen yang lebih besar |
Menambahkan overhead memori dan penyimpanan untuk menyimpan kolom yang dihasilkan dan indeks untuk setiap penelusuran |