本文為您介紹如何在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檢索同義字詞典。在檢索完成後,會檢索出包含value或value同義字的結果。pgsearch.synonym_terms(synonym_id => '<synonym_id>', field => '<field>', VALUE => '<value>')參數說明
synonym_id:要檢索的唯一的同義字詞典標識符。field:要檢索的列。value:要檢索的詞。
使用樣本
假設同義字詞典
warehouse中,shoes的同義字為ARRAY["socks", "boots"]。以下樣本中,將在description列檢索包含shoes、socks或boots的結果。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') ] ) )