全部產品
Search
文件中心

AnalyticDB: 配置同義字詞典

更新時間:Jan 11, 2025

本文為您介紹如何在pgsearch外掛程式中進行同義字詞典的管理和使用。

同義字在搜尋領域的存在十分必要。同義字檢索和向量檢索互補,可以大幅提升檢索召回率。

  • 增強搜尋的準確性。當使用者輸入某個關鍵詞時,可能與輸入詞相關的結果使用了一個與之不同的關鍵詞或短語。同義字允許搜尋引擎識別這些情況,返回更準確的匹配結果。

  • 多語言支援。對於支援多種語言或方言的應用,同義字可以協助縮小或消除詞彙差異,例如:data和資料實際上是同義字。

  • 行業特定術語。特定行業或領域可能有其專有的術語,同義字可以協助搜尋引擎理解這些術語和通用的關鍵詞之間的關係,返回更準確的匹配結果。

  • 提升使用者體驗。使用者可能不知道或暫時想不起來某個特定的關鍵詞,但通過使用同義字,可以找到他們想要的結果。

前提條件

  • 核心版本為v7.1.1.0及以上的AnalyticDB PostgreSQL 7.0版執行個體。

  • 已經安裝pgsearch外掛程式。

    說明

    如您未安裝,請提交工單聯絡工作人員協助安裝(需要重啟執行個體)。

管理同義字詞典

建立同義字詞典

使用pgsearch.synonyms_create函數建立一個新的同義字詞典,使用時傳入唯一的同義字詞典標識符(synonyms_id)。

SELECT pgsearch.synonyms_create('<synonyms_id>');

使用樣本

SELECT pgsearch.synonyms_create('warehouse');

刪除同義字詞典

使用pgsearch.synonyms_drop函數刪除現有的同義字詞典,使用時傳入唯一的同義字詞典標識符。

SELECT pgsearch.synonyms_drop('<synonyms_id>');

使用樣本

SELECT pgsearch.synonyms_drop('warehouse');

插入與更新同義字詞典

使用pgsearch.synonyms_set函數插入或更新(覆蓋原有的)同義字詞典。當前僅支援插入JSON格式的資料,其中鍵為主詞,值是同義字列表。

SELECT pgsearch.synonyms_set('<synonyms_id>', '<jsonb_data>');

使用樣本

-- 插入同義字
SELECT pgsearch.synonyms_set('warehouse', 
    '{"pc": ["personal computer", "laptop"], 
      "phone": ["telephone", "mobile"], 
      "apple": ["mac", "iphone"], 
      "shoes": ["socks", "boots"]}'
);

-- 更新同義字詞典,“apples”覆蓋原來的"mac", "iphone"
SELECT pgsearch.synonyms_set('warehouse', 
    '{"apple": ["apples"]}'
);

查詢同義字詞典

  • 使用pgsearch.synonyms_show函數查詢所有同義字詞典。

    SELECT * FROM pgsearch.synonyms_show();
  • 使用synonyms_list函數查詢某個特定同義字詞典的詳細資料,使用時傳入唯一的同義字詞典標識符。如果需要查詢特定詞的同義字,傳入詞典參數。

    --查詢特定同義字詞典的詳細資料
    SELECT * FROM pgsearch.synonyms_list('<synonyms_id>') ORDER BY word;
    
    --查詢特定詞的同義字
    SELECT * FROM pgsearch.synonyms_list('<synonyms_id>', '<word>')

使用同義字詞典

  • 使用函數pgsearch.synonym_terms檢索同義字詞典。在檢索完成後,會檢索出包含valuevalue同義字的結果。

    pgsearch.synonym_terms(synonym_id => '<synonym_id>', field => '<field>', VALUE => '<value>')

    參數說明

    • synonym_id:要檢索的唯一的同義字詞典標識符。

    • field:要檢索的列。

    • value:要檢索的詞。

    使用樣本

    假設同義字詞典warehouse中,shoes的同義字為ARRAY["socks", "boots"]。以下樣本中,將在description列檢索包含shoessocksboots的結果。

    SELECT * FROM mock_items WHERE description @@ pgsearch.config(
        query => pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes')
    )
  • 可以在進階查詢,例如布爾檢索、集合檢索等檢索中使用pgsearch.synonym_terms()作為查詢對象。

    使用樣本一

    檢索description列包含“book”、“shoes”或“shoes”任一同義字,且不包含“speaker”的結果。

    SELECT * FROM mock_items ORDER BY description @@ pgsearch.config(
        query => pgsearch.boolean(
            should => ARRAY[
                pgsearch.term('description:book'),
                pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes')
            ],
            must_not => ARRAY[
                pgsearch.term(field => 'description', VALUE => 'speaker')
            ]
        )
    ) ;

    使用樣本二

    檢索description列包含“book”、“shoes”或“shoes”任一同義字的文檔。

    SELECT * FROM mock_items WHERE description @@ pgsearch.config(
        query =>  pgsearch.term_set(
            terms => ARRAY[
                pgsearch.synonym_terms(synonym_id => 'warehouse', field => 'description', VALUE => 'shoes'),
                pgsearch.term(field => 'description', VALUE => 'book')
            ]
        )
    )