このトピックでは、pg_jieba拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスで中国語のフルテキスト検索を実行する方法について説明します。
前提条件
RDSインスタンスのメジャーエンジンバージョンは、拡張機能でサポートされています。 詳細については、「ApsaraDB RDS For PostgreSQLでサポートされている拡張機能」をご参照ください。
RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合、RDSインスタンスのマイナーエンジンバージョンが更新されます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
pg_jiebaは、RDSインスタンスのshared_preload_librariesパラメーターの値に追加されます。
shared_preload_librariesパラメーターの値にpg_jiebaを追加する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
pg_jieba拡張を使用する方法
pg_jieba拡張子を作成します。
拡張の作成pg_jieba;
説明特権アカウントのみが上記のコマンドの実行を許可されます。
pg_jieba拡張子を削除します。
ドロップ延長pg_jieba;
説明特権アカウントのみが上記のコマンドの実行を許可されます。
例 1:
SELECT * FROM to_tsvector('jiebacfg '、' 、后在京都大学深 '); to_tsvector -------------------------------------------------------------------------------------------------------------- '中国科学院':5 '':4 '':8 '':9 '小明':1 '日本都大学':10 '工':3 '工':11 '工':2 '工':6 ':7 (1行)
例 2:
SELECT * FROM to_tsvector('jiebacfg '、' '); to_tsvector ------------------------------------------------------------------------------------------- '家':11 '主任':5 '也':6 '算':8 '新':3 '':4 '方向':9 '':2,7 '李小福':1 '的':10 (1行)
拡張機能
インストールした拡張機能のバージョンに基づいて、pg_jieba拡張機能の拡張機能を表示できます。
次のSQL文を実行して、pg_jieba拡張のバージョンを照会します。
SELECT * からpg_available_extensions WHERE name='pg_jieba';
異なるメジャーエンジンバージョンとマイナーエンジンバージョンを実行するRDSインスタンスにインストールされているpg_jieba拡張機能のデフォルトバージョンを表示します。
主要なエンジン版
マイナーエンジン版
デフォルトバージョンの拡張機能
RDS PostgreSQL 15
20230630以降
1.2.0
20221030 ~ 20230530
1.1.0
RDS PostgreSQL 14
20230630以降
1.2.0
20220730 ~ 20230530
1.1.0
PostgreSQL 10、PostgreSQL 11、PostgreSQL 12、またはPostgreSQL 13
20211130以降
1.1.0
バージョン1.1.0の拡張機能
pg_jieba拡張機能を使用すると、複数のカスタム辞書を設定し、辞書を切り替えることができます。
-- 最初のカスタム辞書にデータを挿入します。 デフォルトでは、データは最初のカスタム辞書に挿入されます。 最初のカスタム辞書は0で表されます。 最初のカスタム辞書の重み値は10です。 jieba_user_dict VALUESに挿入する ('阿里空間'); INSERT INTO jieba_user_dict VALUES ('研究工技师',0,10); -- pg_jieba拡張で定義されている辞書を使用して、中国語テキストをセグメント化します。 SELECT * FROM to_tsvector('jiebacfg', 'zth行阿里云的な一体的な研究者 '); to_tsvector ------------------------------------------------------ 'zth':1 '一枚':6 '一枚':4 '加工師':8 '研究株式会社':7 '阿里':3 (1行) -最初のカスタム辞書に切り替えます。 jieba_load_user_dict() パラメーターは、カスタム辞書のシーケンス番号を指定します。 SELECT jieba_load_user_dict(0); jieba_load_user_dict ---------------------- (1行) SELECT * FROM to_tsvector('jiebacfg', 'zth行阿里云的な一体的な研究者 '); to_tsvector -------------------------------------------- 'zth':1 '一本':5 '研究者':6 '阿里':3 (1行)
pg_jieba拡張機能を使用すると、オフセットに基づいてテキストセグメンテーション結果を表示できます。
SELECT * FROM to_tsvector('jiebacfg_pos', 'zth-阿里云的な一体的な研究制作ツールクラス '); to_tsvector -------------------------------------------------------------------------------------- 'zth:0 ':1' 一: 8 ':6' 一: 6 '一: 6':4 '工作員: 12':8 ':3':2 '和合: 7':5 '研究員: 10':7 '安里: 4':3 ':1' 一: 8 ':6' クラウド: 6 'クラウド: 6':4 'Engineer: 12':8 'はい: 3':2 ':7':5 'R&D: 10':7 'アリ: 4':3 (1行)
バージョン1.2.0の拡張機能
jieba_load_user_dict()
関数は、CPU使用率とメモリ使用量を減らすために最適化されています。新しいパラメーターが
jieba_load_user_dict()
関数に追加され、検索時にカスタム辞書を使用するかどうかを指定します。構文
jieba_load_user_dict(parameter1, parameter2)
パラメータ説明
パラメーター
説明
parameter1
読み込むカスタム辞書のシーケンス番号を指定します。
parameter2
デフォルトの辞書を読み込むかどうかを指定します。
0: デフォルトの辞書を読み込みます。
1: デフォルトの辞書をロードしません。
例
jieba_user_dict VALUESに挿入する ('阿里'); 挿入0 1 INSERT INTO jieba_user_dict VALUES ('研究工技师',0,10); 挿入0 1 -最初の0はカスタム辞書のシーケンス番号を示し、2番目の0はデフォルト辞書がロードされていることを示します。 SELECT jieba_load_user_dict(0,0); jieba_load_user_dict ---------------------- (1行) SELECT * FROM to_tsvector('jiebacfg', 'zth行阿里云的な一体的な研究者 '); to_tsvector -------------------------------------------- 'zth':1 '一本':5 '研究者':6 '阿里':3 (1行) SELECT jieba_load_user_dict(0,1); jieba_load_user_dict ---------------------- (1行) SELECT * FROM to_tsvector('jiebacfg', 'zth行阿里云的な一体的な研究者 '); to_tsvector ------------------------------------------------------ 'zth':1 '一枚':6 '一枚':4 '加工師':8 '研究株式会社':7 '阿里':3 (1行)
説明jieba_user_dict
テーブルまたはjieba_load_user_dict()
関数が存在しない場合、RDSインスタンスのマイナーエンジンバージョンを更新して、拡張機能を20220730して再インストールする必要があります。マイナーエンジンバージョンの更新方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのマイナーエンジンバージョンの更新」をご参照ください。
次のステートメントを実行して、拡張機能を再インストールします。
ドロップ延長pg_jieba; 拡張の作成pg_jieba;
参考資料
pg_jieba拡張機能の使用方法の詳細については、「pg_jieba公式ドキュメント」をご参照ください。