使用案例
更新時間:
本文將引導您如何使用pgsearch插件在云原生數據倉庫 AnalyticDB PostgreSQL 版數據庫中基于BM25算法實現全文檢索。下面將使用維基百科數據集作為案例數據集,詳細介紹如何導入數據集、創建索引并查詢。
前提條件
實例版本為內核版本v7.1.0.0及以上的AnalyticDB PostgreSQL 7.0版。
已經安裝pgsearch插件。
說明如您未安裝,請提交工單聯系工作人員協助安裝(需要重啟實例)。
操作步驟
導入維基百科數據集到云原生數據倉庫 AnalyticDB PostgreSQL 版數據庫中。
本次示例數據文件為wiki-articles-1w.json。數據文件中包含以下字段:url、title、body。共有1萬行數據。
創建temp_json表。
CREATE TABLE temp_json(data JSONB);
通過
COPY
命令將數據文件導入到新建的temp_json表中。請替換/path/to/wiki-articles-1w.json
為數據文件的實際路徑。\COPY temp_json(data) FROM '/path/to/wiki-articles-1w.json' CSV QUOTE E'\x01' DELIMITER E'\x02';
說明由于數據本身含有引號和逗號等字符,因此此處使用非標準字符
E'\x01'
作為引號,E'\x02'
作為分隔符,確保文件中的所有數據都能被正確解析而不產生歧義。創建wiki表。
CREATE TABLE wiki ( id SERIAL PRIMARY KEY, url TEXT, title TEXT, body TEXT );
將temp_json表中的數據解析并通過
INSERT
命令導入到wiki表中。INSERT INTO wiki(url, title, body) SELECT data->>'url' AS url, data->>'title' AS title, data->>'body' AS body FROM (SELECT data FROM temp_json) A;
創建BM25索引。
使用pgsearch插件提供的
create_bm25
函數在wiki表的body字段上創建BM25索引。CALL pgsearch.create_bm25( index_name => 'wiki_idx', table_name => 'wiki', text_fields => '{body: {}}' );
使用BM25索引進行查詢。
使用新建的BM25索引進行全文檢索。查找與關鍵詞“artificial intelligence”最相關的20條數據,返回結果按相關性排序,示例如下。
SELECT * FROM wiki ORDER BY body @@@ pgsearch.config('body:"artificial intelligence"') LIMIT 20;
完整示例語句
以下是上文操作步驟中涉及的所有示例語句。
-- 導入JSON文件
CREATE TABLE temp_json(data JSONB);
\COPY temp_json(data) FROM '/path/to/wiki-articles-1w.json' CSV QUOTE E'\x01' DELIMITER E'\x02';
-- 創建wiki表
CREATE TABLE wiki (
id SERIAL PRIMARY KEY,
url TEXT,
title TEXT,
body TEXT
);
-- 解析JSONB數據,并導入到wiki表
INSERT INTO wiki(url, title, body)
SELECT values->>'url' AS url,
values->>'title' AS title,
values->>'body' AS body
FROM (SELECT data AS values FROM temp_json LIMIT 10000) A;
-- 創建BM25索引
CALL pgsearch.create_bm25(
index_name => 'wiki_idx',
table_name => 'wiki',
text_fields => '{body: {}}'
);
-- 全文檢索
SELECT * FROM wiki
ORDER BY body @@@ pgsearch.config('body:"artificial intelligence"')
LIMIT 20;
文檔內容是否對您有幫助?