全文搜尋總覽

本頁說明全文搜尋的定義和運作方式。

全文搜尋可讓您建構應用程式,用於搜尋表格中的字詞、詞組或數字,而非只在結構化欄位中搜尋完全相符的項目。全文搜尋會將最新的交易一致性已提交資料傳回至應用程式。Spanner 全文搜尋功能還包括修正拼字錯誤、自動偵測搜尋輸入內容的語言,以及為搜尋結果排序。Spanner 會自動擴充文字搜尋,納入大致相符的字詞。

您必須針對要提供全文搜尋功能的任何資料欄建立搜尋索引。Spanner 會分析這些資料欄中的資料,找出要加入搜尋索引的個別字詞。一旦資料庫中新增或修改資料,Spanner 就會立即更新搜尋索引。

  • 基本文字搜尋:使用整個字詞或詞組或部分字詞來搜尋內容,以便取得可靠的結果。查詢述詞範例:
    • 字詞完全符合 [tricolor rat terrier]
    • 完全相符的字詞或詞組 [「rat terrier」]
    • 含有以下任一字詞:[miniature OR standard]
    • 相近字詞 [world AROUND(3) cup]
    • 子字串 [start*]
  • 數值搜尋:執行數值相等和不等搜尋。相等搜尋會比對數字。範圍和不等式搜尋會比對特定範圍內的數字。
  • 以 n-gram 為基礎的搜尋:比對拼寫變化的字詞,包括專有名詞和名稱。這類搜尋功能還可協助比對查詢文字與拼錯的名稱、名稱的其他拼法,以及其他拼法變化的文字。
  • Soundex 搜尋:比對發音相似的字詞。

全文搜尋功能

Spanner 全文搜尋功能具備下列功能:

  • 排名搜尋結果:計算得分,以評估查詢與文件的相符程度 (例如,為 column_A 提供較高的權重)。使用 SQL 運算式自訂排名。
  • 網頁摘要:在搜尋結果中醒目顯示相符的文字。
  • 全球支援:自動支援不同語言的符記化,包括 CJK 區隔。手動指定語言可讓您進一步微調。
  • 治理:尋找特定字詞的所有出現位置。
  • 拼寫校正:自動修正查詢中的拼寫錯誤,以便與儲存空間中的正確拼寫字詞相符。舉例來說,如果使用者搜尋「girafe」,搜尋結果會找出含有「giraffe」的文件。
  • 加入關聯字同義詞,包括停用字詞:自動加入與內容相關的同義詞,以提高回溯率。例如「the house」與「this house」相符,而「cat picture」與「kitty picture」相符。
  • 從文字轉換為內容相關數字,以及從數字轉換為文字:將數字的文字版本與數字表示法進行比對,反之亦然。例如「five cats」與「5 cats」相符。
  • 自動複數轉換:將「cat」轉換為「cats」。

全文搜尋概念

全文搜尋有以下幾個重要概念:

  • 文件是指特定資料列中的可搜尋資料。
  • 符記是指儲存在搜尋索引中的文件中每個字詞。
  • 斷詞程序會將文件拆分為符記。
  • 符記分隔器是用於符記化的 SQL 函式。
  • 反向索引會儲存符記。使用 SQL 查詢搜尋倒轉索引。

為了瞭解全文搜尋,我們來看看一個應用程式,它使用資料庫來儲存每位歌手的歌曲。每列代表一首歌曲。每首歌曲都含有標題、歌詞、歌手和專輯等欄。應用程式會使用全文搜尋功能,讓使用者以自然語言查詢搜尋歌曲:

  • 搜尋功能支援使用 OR 運算子的查詢,例如 Prince OR Camille。應用程式可以直接將搜尋框中的使用者輸入內容,透過 rquery 語法饋送至 SQL SEARCH 函式。詳情請參閱「查詢搜尋索引」。
  • Spanner 會使用搜尋索引,在不同欄位中尋找相符的文件。舉例來說,應用程式可以發出查詢,在標題中搜尋「cry」,歌詞中搜尋「so cold」,並以「Prince」做為歌手。

搜尋索引的其他用途

除了全文搜尋之外,搜尋索引還有許多用途,例如:

  • 在陣列資料欄中索引元素。請考慮使用陣列資料欄的應用程式,以便儲存與項目相關聯的標記。有了搜尋索引,應用程式就能有效率地查詢包含特定標記的資料列。詳情請參閱「陣列權杖化」一文。

  • 找出位於一組查詢條件交集內的資料。舉例來說,您可以使用任意一組屬性 (顏色、尺寸、品牌、評分等) 在目錄中搜尋產品。

  • 使用數值搜尋條件,單獨使用或搭配全文搜尋條件。以下列舉一些搜尋索引可用於數值搜尋的情況:

    • 與全文應用程式搭配使用時。例如,找出主旨為「Picture」且大小超過 1 MB 的電子郵件。
    • 當該條件是先前所述條件交集的一部分時。例如,找出 color = "yellow" AND size = 14 AND rating >= 4.5 的產品。
    • 搜尋數值欄的交集時。舉例來說,假設有一個資料表用來儲存活動開始和結束時間,搜尋索引可有效執行查詢,找出在特定時間點發生的事件:start_time <= @p AND end_time > @p

    詳情請參閱「數字索引」。

全文搜尋步驟

在 Spanner 中,全文搜尋需要執行下列步驟:

  1. 使用 Spanner 分析器函式 (例如 TOKENIZE_SUBSTRING) 將文件切割為符記。詳情請參閱「符記化」。
  2. 使用 CREATE SEARCH INDEX DDL 陳述式建立搜尋索引,以便保留權杖。詳情請參閱「搜尋索引」。
  3. 使用 Spanner SEARCH 函式查詢搜尋索引中的文件。詳情請參閱「查詢總覽」。
  4. 使用 Spanner SCORE 函式為查詢結果排序。詳情請參閱「排序搜尋結果」。

限制

定價

使用全文搜尋時,Spanner 不會額外收費,但由於需要額外的運算和儲存資源,因此實作全文搜尋會增加成本。

詳情請參閱 Spanner 定價

後續步驟