使用 Data Connect 執行全文搜尋

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 執行準確的詞彙詞幹處理,確保搜尋不會遺漏相關結果。如果搜尋範圍涵蓋多個資料欄,這些資料欄必須全部設為相同語言。

語言
  • 簡單
  • arabic
  • 亞美尼亞
  • 巴斯克
  • 加泰隆尼亞
  • 丹麥
  • 荷蘭
  • 英文
  • 芬蘭
  • 法國
  • 德國
  • 希臘
  • 北印度文
  • 匈牙利
  • 印尼
  • 愛爾蘭
  • 義大利
  • 立陶宛
  • 尼泊爾人
  • 挪威

使用 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 篩選器,對表格中的多個資料欄執行這項操作
可處理較大的文件 可處理大型文件 搜尋較大的文件時,效能較差
增加記憶體和儲存空間負擔,以儲存產生的資料欄和每個搜尋的索引