すべてのプロダクト
Search
ドキュメントセンター

PolarDB:pg_jieba\ (中国語形態素解析)

最終更新日:Mar 29, 2026

PostgreSQL の組み込みフルテキスト検索はアルファベットベースの言語をサポートしますが、中国語テキストの形態素解析には対応していません。pg_jieba はこのギャップを埋める拡張機能であり、中国語テキストを検索可能なレクセム(語彙単位)に分割することで、PolarDB for PostgreSQL における中国語コンテンツのフルテキスト検索を実現します。

サポートされるバージョン

pg_jieba は、以下のバージョンで実行中の PolarDB for PostgreSQL クラスターで利用可能です。

  • PostgreSQL 15(リビジョンバージョン 15.7.2.0 以降)

  • PostgreSQL 14(リビジョンバージョン 14.5.2.0 以降)

  • PostgreSQL 11(リビジョンバージョン 1.1.28 以降)

現在のリビジョンバージョンを確認するには:

  • PostgreSQL 15 および 14 の場合:

    SELECT version();
  • PostgreSQL 11 の場合:

    SHOW polar_version;

仕組み

pg_jieba は 3 種類のテキスト検索構成を提供します。各構成は異なる形態素解析戦略を採用し、それぞれ異なる検索シナリオに最適化されています。

構成モード推奨用途
jiebacfg正確モードインデックス作成向け。冗長な部分語を含まず、最も正確な語彙単位の集合にテキストを分割します。
jiebaqry全モードクエリにおける再現率の最大化向け。すべての可能な語の組み合わせ(部分語を含む)を抽出します。
jiebacfg_pos位置付き正確モード各トークンについて文字オフセット位置が必要な場合に使用します。また、正確モードでは除外されるストップワードも含みます。

正確モードと全モードの選択基準: フルテキストインデックス作成の大部分のケースでは、より少ない数で精度の高いトークンを返す jiebacfg を使用してください。一方、検索ヒットの見落としがノイズ除去よりも重大な場合は、すべての可能な部分語を返す jiebaqry を使用してください。これにより再現率は向上しますが、重複マッチが発生する可能性があります。

拡張機能の有効化および無効化

説明

これらの文を実行できるのは特権アカウントのみです。

pg_jieba 拡張機能を作成するには、以下のコマンドを実行します。

CREATE EXTENSION pg_jieba;

削除するには:

DROP EXTENSION pg_jieba;

中国語テキストの形態素解析

3 種類の構成すべてが標準関数 to_tsvector と連携して動作します。構成名は第 1 引数として指定します。

例 1 — 入力: '小明硕士毕业于中国科学院计算所,后在日本京都大学深造'

正確モード(jiebacfg):

SELECT * FROM to_tsvector('jiebacfg', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                        to_tsvector
----------------------------------------------------------------------------------
 '中国科学院':5 '小明':1 '日本京都大学':10 '毕业':3 '深造':11 '硕士':2 '计算所':6
(1 row)

全モード(jiebaqry) — '中国''学院''科学' などの部分語を含む、より多くのトークンを返します。

SELECT * FROM to_tsvector('jiebaqry', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                                  to_tsvector
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 '中国':5 '中国科学院':9 '京都':16 '大学':17 '学院':7 '小明':1 '日本':15 '日本京都大学':18 '毕业':3 '深造':19 '硕士':2 '科学':6 '科学院':8 '計算':10 '計算所':11
(1 row)

位置付き正確モード(jiebacfg_pos) — '于''后''在' などのストップワードと文字オフセットを含みます。

SELECT * FROM to_tsvector('jiebacfg_pos', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                                       to_tsvector
------------------------------------------------------------------------------------------------------------------------------------------
 '中国科学院:7':5 '于:6':4 '后:16':8 '在:17':9 '小明:0':1 '日本京都大学:18':10 '毕业:4':3 '深造:24':11 '硕士:2':2 '计算所:12':6 ',:15':7
(1 row)

例 2 — 入力: '李小福是创新办主任也是云计算方面的专家'

正確モード(jiebacfg):

SELECT * FROM to_tsvector('jiebacfg', '李小福是创新办主任也是云计算方面的专家');
                    to_tsvector
-------------------------------------------------------------------
 '专家':11 '主任':5 '云计算':8 '创新':3 '办':4 '方面':9 '李小福':1
(1 row)

全モード(jiebaqry) — '计算''云计算' の部分語として返します。

SELECT * FROM to_tsvector('jiebaqry', '李小福是创新办主任也是云计算方面的专家');
                          to_tsvector
-----------------------------------------------------------------------------
 '专家':12 '主任':5 '云计算':9 '创新':3 '办':4 '方面':10 '李小福':1 '计算':8
(1 row)

位置付き正確モード(jiebacfg_pos) — '是''也''的' などのストップワードとそのオフセットを含みます。

SELECT * FROM to_tsvector('jiebacfg_pos', '李小福是创新办主任也是云计算方面的专家');
                                              to_tsvector
---------------------------------------------------------------------------------------------------------------------------
 '专家:17':11 '主任:7':5 '也:9':6 '云计算:11':8 '创新:4':3 '办:6':4 '方面:14':9 '是:10':7 '是:3':2 '李小福:0':1 '的:16':10
(1 row)

カスタム辞書の使用

pg_jieba は複数のカスタム辞書をサポートしています。ドメイン固有の用語をカスタム辞書に登録することで、コンテンツの形態素解析精度を向上させることができます。

重要

カスタム辞書を使用する前に、pg_jiebashared_preload_libraries パラメーターに追加してください。この設定はコンソールから行います — 「」をご参照ください。設定を保存すると、クラスターが再起動します。

以下の例では、カスタム辞書の導入が形態素解析結果に与える影響を示します。カスタム辞書がない状態では、'阿里云' および '研发工程师' が部分語に分割されますが、カスタム辞書を読み込んだ後は、それぞれ単一のトークンとして扱われます。

  1. 最初のカスタム辞書(インデックス 0、重み 10)に用語を挿入します。

    INSERT INTO jieba_user_dict VALUES ('阿里云');
    INSERT INTO jieba_user_dict VALUES ('研发工程师', 0, 10);
  2. 組み込み辞書による形態素解析を確認します(この時点ではカスタム辞書は有効になっていません)。

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
                    to_tsvector
    ------------------------------------------------------
     'zth':1 '一个':6 '云':4 '工程师':8 '研发':7 '阿里':3
    (1 row)

    '阿里云''阿里''云' に、'研发工程师''研发''工程师' に分割されていることがわかります。

  3. カスタム辞書 0 に切り替えます。

    SELECT jieba_load_user_dict(0);
     jieba_load_user_dict
    ----------------------
    
    (1 row)
  4. 同じクエリを再度実行します。カスタム用語が単一のトークンとして認識されるようになりました。

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
                    to_tsvector
    --------------------------------------------
     'zth':1 '一个':5 '研发工程师':6 '阿里云':3
    (1 row)

次のステップ