Firebase Data Connect 支援 PostgreSQL 驅動的全文搜尋功能。 透過全文搜尋功能,您可以在多個資料欄中同時搜尋關鍵字和詞組,快速有效率地找出大型資料集中的資訊。
您可以在服務中加入全文搜尋功能。首先,請將 @searchable
指令新增至要搜尋的結構定義中的 String
。例如:
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
}
新增這項指令後,您就可以在查詢中加入 <pluralType>_search
欄位,執行全文搜尋。在本例中,這會是 movies_search
:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
微調全文搜尋結果
您可以將引數新增至 @searchable
指令和 _search
欄位,微調全文搜尋結果。
共用引數
您可以使用許多與基本清單欄位相同的引數來控制搜尋結果 <pluralType>
:
order
可讓您變更結果順序。如果省略此引數,結果會依關聯性遞減排序。where
可讓你新增額外的搜尋篩選條件 (例如只搜尋特定類型的電影)。limit
會讓查詢只傳回前 X 個結果。offset
會讓查詢略過前 X 個結果。distinct
會將 DISTINCT 運算子新增至產生的 SQL。
選擇語言
根據預設,全文搜尋會剖析英文文件。您可以使用 @searchable
指令的語言引數變更這項設定:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
指定正確的語言可讓 PostgreSQL 執行準確的詞彙詞幹處理,確保搜尋不會遺漏相關結果。如果搜尋範圍涵蓋多個資料欄,這些資料欄必須全部設為相同語言。
語言 | ||
---|---|---|
|
|
|
使用 psql
,您可以透過下列查詢取得完整清單。
SELECT cfgname FROM pg_ts_config;
查詢格式
根據預設,全文搜尋會使用查詢的網路語意 (類似於 Google 搜尋)。您可以在 <pluralType>_search
欄位中使用 queryFormat
引數變更這項行為。
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
查詢格式有四種選項:
- QUERY 可為網路搜尋引擎提供熟悉的語意 (例如加上引號的字串、AND 和 OR)。這是預設值。
- PLAIN 會比對所有字詞,但不一定會比對在一起 (「棕色狗」會比對「棕色和白色狗」或「白色和棕色狗」)。
- 詞組:比對完全相符的詞組 (「棕色狗」會比對到「白色和棕色的狗」,但不會比對到「棕色和白色的狗」)。
- 進階:使用整套 tsquery 運算子建立複雜查詢。
關聯性門檻
設定關聯性門檻後,搜尋只會傳回高於特定關聯性值的結果。在許多情況下,您不需要設定這項屬性,只要結果的關聯性大於 0,就是相關結果。
不過,如果搜尋結果與您要找的內容不符,您可以透過關聯性門檻篩除這些結果。
如要找出適當的關聯性門檻值,請執行幾項測試搜尋,並查看 _metadata.relevance
:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
選擇門檻,略過您認為不相關的結果。方法如下:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
選擇全文搜尋、向量相似度搜尋和字串模式篩選器
Data Connect 提供幾種不同的資料庫搜尋方式。
請參閱下表,根據您的用途選擇合適的產品。
全文搜尋 | 向量相似度搜尋 | 字串模式篩選器 |
---|---|---|
適合實作一般搜尋功能 | 適合尋找語意相似的資料列 (例如建議或「類似內容」) | 適合用於完全相符的文字或規則運算式搜尋 |
執行詞彙詞幹還原,協助比對同一字詞的不同形式或時態 | 需要 Vertex AI | 由於不需要任何索引或產生的資料欄,因此使用的記憶體和磁碟空間最少 |
可對資料表中的多個欄執行 | 一次只能處理一個資料欄 | 可使用 OR 篩選器,對表格中的多個資料欄執行這項操作 |
可處理較大的文件 | 可處理大型文件 | 搜尋較大的文件時,效能較差 |
增加記憶體和儲存空間負擔,以儲存產生的資料欄和每個搜尋的索引 |