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

Hologres:全文転置インデックス

最終更新日:Mar 20, 2026

Hologres はバージョン 4.0 以降、全文転置インデックスをサポートしています。この機能は、パフォーマンス専有型の全文検索エンジン Tantivy を活用し、BM25 類似度スコアリングアルゴリズムのサポートを含む、高速かつ正確な検索機能を提供します。ドキュメントランキング、キーワード検索、フレーズ検索などに使用できます。

仕組み

テキストデータを Hologres に書き込むと、Hologres はインデックス構成に基づいて、データファイルごとに全文転置インデックスファイルを構築します。まず、トークナイザーがテキストをトークンに分割します。次に、インデックスは各トークンとソーステキスト間のマッピングを、位置情報と Term Frequency (TF) 情報とともに記録します。

検索を実行すると、Hologres はまずクエリテキストを形態素解析してクエリトークンのセットを取得します。その後、BM25 アルゴリズムを使用して、各ソースドキュメントとクエリトークンセットとの関連度スコアを計算し、高速かつ正確な全文検索を実現します。

注意事項

  • 全文転置インデックスは、Hologres バージョン 4.0 以降の列指向テーブルおよび行列ハイブリッドテーブルでのみ使用できます。行指向テーブルはサポートされていません。

  • 全文転置インデックスは、TEXT、CHAR、または VARCHAR 型の列にのみ作成できます。

  • 一度に 1 つの列にのみ全文転置インデックスを構築できます。各列は 1 つの全文転置インデックスのみをサポートします。複数の列にインデックスを作成するには、列ごとに個別のインデックスを作成してください。

  • 全文転置インデックスを作成した後、Hologres はコンパクション中に非同期でインデックスファイルを構築します。これは、既存のデータと新しくバッチ挿入されたデータの両方に適用されます。インデックスファイルが構築されるまで、そのデータの BM25 関連度スコアはゼロになります。

  • 全文転置インデックス作成後のリアルタイムデータ書き込みについて:Hologres バージョン 4.0.8 より前では、データ到着時にインデックスが同期的に構築されていました。バージョン 4.0.8 以降では、リアルタイムの書き込みパフォーマンスとインデックス作成効率のバランスを取るため、Hologres はメモリ内リアルタイムインデックスを 1 秒ごとにリフレッシュします。各リフレッシュ後にのみデータをクエリできます。

  • 全文検索は、フルテキストインデックスを持つ列でのみ機能します。インデックスのない列での総当たり計算はサポートしていません。

  • バッチデータインポートには Serverless Computing リソースを使用することを推奨します。Serverless リソースは、インポート中にコンパクションを実行し、全文インデックスを同期的に構築します。詳細については、「Serverless Computing を使用した読み書きタスクの実行」および「Serverless Computing を使用したコンパクションタスクの実行」をご参照ください。Serverless リソースを使用しない場合は、バッチデータのインポート後またはインデックスの変更後に、次のコマンドを実行して手動でコンパクションをトリガーします:コンパクション

    VACUUM <schema_name>.<table_name>;
  • BM25 関連度スコアはファイルごとに計算されます。データ量が少ない場合は、手動でコンパクションをトリガーしてファイルをマージし、検索精度を向上させてください。

  • Serverless Computing リソースを使用して全文検索クエリを実行できます。

  • 以下の表に示すように、ユースケースに基づいてトークナイザーを選択してください:

    シナリオ

    トークナイザー

    注意事項

    長文記事からのキーワード抽出

    Jieba

    新語発見と複雑なパターン切り替えをサポートします。

    中国語の記述テキスト検索

    IK

    中国語の用語を正確に識別します。

    英語のタイトルテキスト検索

    Simple、Whitespace、Standard

    シンプルで効率的です。英語のテキストに応じて選択してください。

    あいまいなログテキスト検索

    Ngram

    辞書は不要です。あいまい検索のニーズに対応します。

    中国のプロダクトや名前のピンイン検索

    Pinyin

    完全なピンイン、頭文字、多音字の推論をサポートします。

インデックスの管理

インデックスの作成

構文

CREATE INDEX [ IF NOT EXISTS ] idx_name ON table_name
       USING FULLTEXT (column_name [ , ... ])
       [ WITH ( storage_parameter [ = value ] [ , ... ] ) ];

パラメーターの説明

パラメーター

説明

idx_name

インデックス名。

table_name

ターゲットテーブル名。

column_name

全文転置インデックスのターゲット列。

storage_parameter

全文転置インデックスのパラメーターを構成します。サポートされているパラメーターは次のとおりです:

  • tokenizer:トークナイザー名。サポートされているトークナイザーは次のとおりです:

    • jieba (デフォルト):ルールベースのマッチングと統計モデルを組み合わせた中国語トークナイザー。

    • whitespace:スペースでテキストを分割します。

    • standard:Unicode Standard Annex #29 を使用して形態素解析を行います。詳細は「Unicode Standard Annex #29」をご参照ください。

    • simple:スペースと句読点でテキストを分割します。

    • keyword:入力を処理せずにそのまま返します。

    • icu:多言語対応のトークナイザー。

    • ik:IK Analyzer に基づく中国語トークナイザー。英語の単語、メールアドレス、URL (:// なし)、IP アドレスを自動的に検出します。Hologres バージョン 4.0.9 以降で利用可能です。

    • ngram:文字レベルのスライドウィンドウ トークナイザー。テキストを連続する n 文字または n トークンのシーケンス (n-gram) に分割して、再現率とあいまい一致を向上させます。LIKE および ILIKE クエリの高速化に最適です。Hologres バージョン 4.0.9 以降で利用可能です。

    • pinyin:漢字や単語のピンインを生成するトークナイザー。また、非中国語文字列のピンインを推論して、精度と再現率を向上させます。Hologres バージョン 4.0.9 以降で利用可能です。

  • analyzer_params:トークナイザーの構成。JSON 文字列である必要があります。

    • 各トークナイザーにはデフォルトの analyzer_params があります。ほとんどの場合、tokenizer パラメーターのみを指定してデフォルトを使用します。必要な場合を除き、analyzer_params を明示的に設定しないでください。

    • 一部の設定はカスタマイズできます。詳細については、「高度な設定:トークナイザー構成のカスタマイズ」をご参照ください。

  • index_options:全文転置インデックスのレコードレベル。インデックスが格納する情報量とサポートする機能を制御します。Hologres バージョン 4.1.9 以降で利用可能です。有効な値と説明は、次のセクション「index_options の設定詳細」に記載されています。

説明

インデックスごとに指定できる tokenizer と analyzer_params の設定は 1 つだけです。

index_options の設定詳細

index_options は 3 つのレベルをサポートしています。上位レベルは下位レベルのすべての情報を含みます:freqs は docs を含み、positions は freqs と docs を含みます。

インデックスの内容

機能への影響と制限

典型的なユースケース

positions (デフォルト)

ドキュメント ID + Term Frequency + タームの位置

完全な機能サポート:フレーズクエリと標準の関連度スコアリングをサポートします。

一般的な全文検索

freqs

ドキュメント ID + Term Frequency

位置情報が欠落しているため、フレーズクエリは失敗します。

Term Frequency によるスコアリングとソートは行うが、完全なフレーズ一致は不要な場合

docs

ドキュメント ID のみ

  • Term Frequency がないため、スコアリングは頻度の違いを無視します (すべての一致するドキュメントが同じ TF スコアを取得します)。

  • 位置情報が欠落しているため、フレーズクエリは失敗します。

存在チェックのみ (全文インデックスによるフィルタリング)。ストレージに敏感で、関連度によるソートが不要な場合

説明

keyword トークナイザーを使用するインデックスの場合、レコードレベルは docs に固定され、index_options で変更することはできません。

  • デフォルトのトークナイザー (jieba) とデフォルトの構成を使用して全文転置インデックスを作成します。

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1);
  • ik トークナイザーをそのデフォルト構成で明示的に使用します。

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • カスタムの jieba トークナイザー構成を使用します:exact モードと小文字フィルターのみ。

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
  • インデックス作成時に index_options を freqs に設定します (スペースを節約しますが、フレーズクエリは無効になります)。Hologres バージョン 4.1.9 以降で利用可能です。

    CREATE INDEX idx1 ON tbl
           USING FULLTEXT (col1)
           WITH (index_options = 'freqs');
説明
  • 全文転置インデックスを作成した後、データインポート後のコンパクション中にインデックスファイルが構築されます。

  • バッチデータインポートには Serverless Computing リソースを使用することを推奨します。Serverless リソースは、インポート中にコンパクションを実行し、全文インデックスを同期的に構築します。詳細については、「Serverless Computing を使用した読み書きタスクの実行」および「Serverless Computing を使用したコンパクションタスクの実行」をご参照ください。

  • Serverless リソースを使用しない場合は、バッチデータのインポート後またはインデックスの変更後に手動でコンパクションをトリガーします。詳細については、「コンパクション (ベータ)」をご参照ください。

    VACUUM <schema_name>.<table_name>;

インデックスの変更

構文

-- インデックス構成の変更
ALTER INDEX [ IF EXISTS ] <idx_name> SET ( <storage_parameter> = '<storage_value>' [ , ... ] );

-- デフォルト構成の復元
ALTER INDEX [ IF EXISTS ] <idx_name> RESET ( <storage_parameter> [ , ... ] );

パラメーターの説明

パラメーターの詳細については、「パラメーターの説明」をご参照ください。

説明

全文転置インデックスを変更した後、コンパクション中に非同期でインデックスファイルが構築されます。インデックスを変更した後は、VACUUM <schema_name>.<table_name>; を実行してすぐにコンパクションをトリガーします。詳細については、「コンパクション」をご参照ください。

  • トークナイザーを standard に変更します。

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • トークナイザーを ik_max_word モードの ik に変更し、小文字変換を無効にし、フィルターを適用しません。

    ALTER INDEX idx1 SET (
      tokenizer = 'ik',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );
  • デフォルトの jieba トークナイザーとそのデフォルトの analyzer_params を復元します。

    ALTER INDEX idx1 RESET (tokenizer);
    ALTER INDEX idx1 RESET (tokenizer, analyzer_params);
  • 現在のトークナイザーのデフォルトの analyzer_params を復元します。

    ALTER INDEX idx1 RESET (analyzer_params);
  • index_options を docs に変更します。

    ALTER INDEX idx1 SET (index_options = 'docs');
  • index_options をデフォルト値 (positions) に復元します。

    ALTER INDEX idx1 RESET (index_options);

インデックスの削除

構文

DROP INDEX [ IF EXISTS ] <idx_name> [ RESTRICT ];

パラメーターの説明

パラメーターの詳細については、「パラメーターの説明」をご参照ください。

インデックスの表示

Hologres は、全文転置インデックスとその場所を一覧表示するためのシステムテーブル hologres.hg_index_properties を提供します。

SELECT * FROM hologres.hg_index_properties;

この SQL を実行して、インデックスに関連付けられたテーブルと列を表示します。

SELECT 
    t.relname AS table_name, 
    a.attname AS column_name
FROM pg_class t
    JOIN pg_index i ON t.oid = i.indrelid
    JOIN pg_class idx ON i.indexrelid = idx.oid
    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
WHERE t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<namespace>')
    AND idx.relname = '<indexname>'
LIMIT 1;

パラメーターの説明:

  • namespace: SELECT * FROM hologres.hg_index_properties; の出力における table_namespace フィールドの値。

  • indexname: 作成した実際のインデックス名。

全文転置インデックスを使用した検索

Hologres は複数の検索モードをサポートしています。ビジネスロジックに最も適したものを選択してください。

検索モード

説明

キーワード一致

形態素解析されたクエリからキーワードを照合します。キーワード間の AND/OR 関係をサポートします。

フレーズ検索

完全なフレーズを照合します。トークンが指定された距離内にある必要があります。

自然言語検索

柔軟で複雑なクエリをサポートします。AND/OR 関係、必須/除外用語、フレーズを定義します。

ターム検索

完全一致を実行します。クエリ文字列がインデックスに完全に存在する必要があります。

TEXT_SEARCH 関数

TEXT_SEARCH 関数は、クエリとソーステキストの BM25 関連度スコアを計算します。

関数構文

TEXT_SEARCH (
  <search_data> TEXT/VARCHAR/CHAR
  ,<search_expression> TEXT
  [ ,<mode> TEXT DEFAULT 'match'
  ,<operator> TEXT DEFAULT 'OR'
  ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT ''
  ,<options> TEXT DEFAULT '']
)

パラメーターの説明

パラメーター

必須

説明

search_data

はい

検索対象のソーステキスト。TEXT、VARCHAR、CHAR 型をサポートします。フルテキストインデックスを持つ列である必要があります。そうでない場合、クエリは失敗します。

search_expression

はい

クエリテキスト。TEXT、VARCHAR、CHAR 型をサポートします。定数である必要があります。

mode

いいえ

検索モード。サポートされている値:

  • match (デフォルト):キーワード一致。各トークンはキーワードです。operator パラメーターを使用してキーワード間の関係を定義します。デフォルトは OR です。

  • phrase:フレーズ検索。optionsslop パラメーターを使用して単語間の最大距離を設定します。デフォルトは 0 (単語は隣接している必要があります) です。

  • natural_language:自然言語検索。AND/OR キーワード、必須/除外用語、フレーズなどの複雑な条件をサポートします。詳細については、「Tantivy」をご参照ください。

  • term:ターム検索。形態素解析やその他の処理を行わずに search_expression で完全一致を実行します。

operator

いいえ

キーワード間の論理演算子。mode が match の場合にのみ適用されます。サポートされている値:

  • OR (デフォルト):いずれかのキーワードが一致した場合に結果を返します。

  • AND:すべてのキーワードが一致した場合にのみ結果を返します。

tokenizeranalyzer_params

いいえ

search_expression に使用するトークナイザーと構成。通常は不要です。

  • 指定しない場合、search_data のフルテキストインデックスと同じトークナイザーと構成が使用されます。search_data が定数の場合、デフォルトの jieba トークナイザーが使用されます。

  • 指定した場合、search_expression は指定されたトークナイザーと構成を使用して形態素解析されます。

options

いいえ

追加の検索パラメーター。フォーマット:'key1=v1;key2=v2;...;keyN=vN;'

現在サポートされているのは slop パラメーターのみで、mode が phrase の場合にのみ適用されます。有効な値は 0 (デフォルト) または正の整数です。フレーズ内の単語間に許容される最大距離を定義します。

説明

slop は、フレーズの term 間の最大ギャップ (または変換コスト) を定義します。jieba、keyword、icu などのトークナイザーの場合、単位は文字です。standard、simple、whitespace などのトークナイザーの場合、単位はトークンです。

戻り値

BM25 関連度スコアを表す非負の FLOAT 値を返します。スコアが高いほど関連性が高いことを示します。スコアが 0 の場合は関連性がないことを意味します。

  • キーワード一致モードと AND 演算子を使用します。

    -- 推奨:パラメーター名を指定
    SELECT TEXT_SEARCH (content, 'machine learning', operator => 'AND') FROM tbl;
    
    -- パラメーター名なし:順番に指定
    SELECT TEXT_SEARCH (content, 'machine learning', 'match', 'AND') FROM tbl;
  • slop=2 のフレーズ検索モードを使用します。

    SELECT TEXT_SEARCH (content, 'machine learning', 'phrase', options => 'slop=2;') FROM tbl;
  • 自然言語検索モードを使用します。

    -- AND/OR 演算子を使用してロジックを定義
    SELECT TEXT_SEARCH (content, 'machine AND (system OR recognition)', 'natural_language') FROM tbl;
    
     -- + (必須) と - (除外) を使用してロジックを定義
    SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
  • ターム検索モードを使用します。

    SELECT TEXT_SEARCH (content, 'machine learning', 'term') FROM tbl;

TOKENIZE 関数

TOKENIZE 関数は、トークナイザー構成を使用して形態素解析された出力を返します。これを使用して、形態素解析の動作をテストおよびデバッグします。

関数構文

TOKENIZE (
  <search_data> TEXT
  [ ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT '']
)

パラメーターの説明

  • search_data:必須。形態素解析するテキスト。定数をサポートします。

  • tokenizeranalyzer_params:オプション。search_data に使用するトークナイザーと構成。デフォルトは jieba です。

戻り値

形態素解析されたトークンを含む TEXT 配列を返します。

インデックス使用状況の確認

実行計画をチェックして、SQL が全文転置インデックスを使用しているかどうかを確認します。Fulltext Filter が表示されていれば、インデックスが使用されています。実行計画の詳細については、「EXPLAIN と EXPLAIN ANALYZE」をご参照ください。

SQL の例:

EXPLAIN ANALYZE SELECT * FROM wiki_articles WHERE text_search(content, 'Yangtze River') > 0;

実行計画は以下のように表示されます。Fulltext Filter の存在は、インデックスが正常に使用されたことを確認します。

QUERY PLAN
Gather  (cost=0.00..1.00 rows=1 width=12)
  ->  Local Gather  (cost=0.00..1.00 rows=1 width=12)
        ->  Index Scan using Clustering_index on wiki_articles  (cost=0.00..1.00 rows=1 width=12)
              Fulltext Filter: (text_search(content, search_expression => 'Yangtze River'::text, mode => match, operator => OR, tokenizer => jieba, analyzer_params => {"filter":["removepunct","lowercase",{"stop_words":["_english_"],"type":"stop"},{"language":"english","type":"stemmer"}],"tokenizer":{"hmm":true,"mode":"search","type":"jieba"}}, options => ) > '0'::double precision)
Query Queue: init_warehouse.default_queue
Optimizer: HQO version 4.0.0

データ準備

次の SQL を実行して、テストテーブルを作成し、サンプルデータを挿入します。

-- テーブルの作成
CREATE TABLE wiki_articles (id int, content text);

-- インデックスの作成
CREATE INDEX ft_idx_1 ON wiki_articles
       USING FULLTEXT (content)
       WITH (tokenizer = 'jieba');

-- データの挿入
INSERT INTO wiki_articles VALUES
  (1, 'The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.'),
  (2, 'Li was born in 1962 in Wendeng County, Shandong.'),
  (3, 'He graduated from the department of physics at Shandong University.'),
  (4, 'The Spring Festival, also known as the Lunar New Year, is China''s most important traditional festival.'),
  (5, 'The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.'),
  (6, 'In 2006, the Spring Festival was approved by the State Council as part of China''s first batch of national intangible cultural heritage.'),
  (7, 'Shandong has dozens of universities.'),
  (8, 'ShanDa is a famous university in Shandong.');

-- コンパクションの実行
VACUUM wiki_articles;

-- テーブルデータのクエリ
SELECT * FROM wiki_articles limit 1;

サンプル出力:

id |                       content                       
---+---------------------------------------------------
 1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.

さまざまな検索例

  • キーワード一致。

    -- (K1) キーワード一致 (デフォルト演算子=OR):'shandong' または 'university' を含むドキュメントに一致します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
    
    -- (K2) キーワード一致 (演算子=AND):'shandong' と 'university' の両方を含むドキュメントにのみ一致します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', operator => 'AND') > 0;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
  • フレーズ検索。

    -- (P1) フレーズ検索 (デフォルト slop = 0):'shandong' の直後に 'university' が続く場合にのみ一致します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase') > 0;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
    (1 row)
    
    -- (P2) slop = 14 のフレーズ検索:'shandong' と 'university' が最大 14 文字離れている場合に一致します。'Shandong has dozens of universities.' に一致します。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase', options => 'slop=14;') > 0;
            
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
    (2 rows)
    
    -- (P3) フレーズ検索は順序が異なるフレーズもサポートしますが、slop の計算が異なります。そのため、'university of Shandong' は slop=23 で一致しますが、slop=22 では一致しません。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase', options => 'slop=23;') > 0;
            
    -- 結果   
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
    (3 rows)
    
    -- (P4) standard トークナイザーでの動作。(ALTER INDEX ft_idx_1 SET (tokenizer = 'standard');)
    -- standard トークナイザーの場合、slop は文字ではなくトークンで測定されます。単語間にゼロトークンは、空白に関係なくフレーズ一致としてカウントされます。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase') > 0;
    
    -- 結果
     id |        content         
    ----+------------------------
      1 | shandong university
      2 | shandong  university
      3 | shandong   university
      4 | shandong    university
    (4 rows)
    
    -- (P5) 句読点は無視されます。(jieba トークナイザーを使用。)
    -- テキストが 'river' と 'length' の間にカンマを使用し、クエリがピリオドを使用しても、一致します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'river. length', mode => 'phrase') > 0;
    
    -- 結果
     id |                       content                       
    ----+-----------------------------------------------------
      1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.
    (1 row)
  • 自然言語クエリ。

    -- (N1) 自然言語クエリ:演算子がない場合はキーワード一致にデフォルト設定されます。(K1) と同等です。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', 'natural_language') > 0;
     id |                               content                               
    ----+---------------------------------------------------------------------
      7 | Shandong has dozens of universities.
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      8 | ShanDa is a famous university in Shandong.
    
    -- (N2) 自然言語クエリ:('shandong' AND 'university') OR 'culture' のいずれかを必要とするキーワード一致。AND は OR よりも優先順位が高いです。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(shandong AND university) OR culture', 'natural_language') > 0;
    -- 以下と同等
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong AND university OR culture', 'natural_language') > 0;
    -- 以下と同等
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(+shandong +university) culture', 'natural_language') > 0;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university in Shandong.
      7 | Shandong has dozens of universities.
      3 | He graduated from the department of physics at Shandong University.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China's first batch of national intangible cultural heritage.
    
    -- (N3) 自然言語クエリ:'shandong' を含み、'university' を含まず、'culture' を含む可能性があります。'culture' キーワードはどの行が一致するかに影響しませんが、一致する行の関連度スコアを増加させます。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '+shandong -university culture', 'natural_language') > 0;
     id |                     content                      
    ----+--------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
    
    -- 'shandong' を含み、'physics' を含まず、'famous' を含む可能性があります。'famous' を含む行はより高い関連度スコアを取得します。
    -- 注:このスコア結果は単一のシャードに対するものです。スコアはシャードやファイルレイアウトによって異なる場合があります。
    SELECT id,
           content,
           TEXT_SEARCH(content, '+shandong -physics famous', 'natural_language') as score
    FROM wiki_articles
    WHERE TEXT_SEARCH(content, '+shandong -physics famous', 'natural_language') > 0
    ORDER BY score DESC;
    
    -- 結果
     id |                     content                      |  score   
    ----+--------------------------------------------------+----------
      8 | ShanDa is a famous university in Shandong.       |  2.92376
      7 | Shandong has dozens of universities.             | 0.863399
      2 | Li was born in 1962 in Wendeng County, Shandong. | 0.716338
    
    -- (N4) 自然言語クエリ:フレーズ検索、(P1) と同等です。フレーズを二重引用符で囲みます。内部の引用符は \ でエスケープします。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"', 'natural_language') > 0;
            
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
    
    -- (N5) 自然言語クエリ:slop を伴うフレーズ検索、(P2) と同等です。~ 構文を使用します。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"~23', 'natural_language') > 0;
            
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university in Shandong.
      7 | Shandong has dozens of universities.
      3 | He graduated from the department of physics at Shandong University.
    
    -- (N6) 自然言語クエリ:すべてのドキュメントに一致します。
    SELECT * FROM wiki_articles                                                                                  
            WHERE TEXT_SEARCH(content, '*', 'natural_language') > 0;
            
    -- 結果
     id |                                           content                                            
    ----+----------------------------------------------------------------------------------------------
      1 | The Yangtze River is China's longest river and the world's third-longest river, about 6,300 km long.
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      4 | The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.
      5 | The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China's first batch of national intangible cultural heritage.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
  • タームクエリ。

    -- (T1) タームクエリ:明示的に 'Spring Festival' を含むため、一致します。
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'Spring Festival', 'term') > 0;
    
    -- 結果         
     id |                                           content                                            
    ----+----------------------------------------------------------------------------------------------
      4 | The Spring Festival, also known as the Lunar New Year, is China''s most important traditional festival.
      5 | The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China''s first batch of national intangible cultural heritage.
    
    
    -- (T2) タームクエリ:一致しません。
    -- wiki_articles.content 列はデフォルトで jieba トークナイザーを使用するため、'shandong university' は分割されます。
    -- タームクエリは、完全一致のために keyword トークナイザーと組み合わせることを推奨します。
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'shandong university', 'term') > 0;
    
    -- 結果         
     id | content 
    ----+---------

複雑なクエリの例

  • PK との結合クエリを実行できます。

    -- 'shandong' または 'university' を含み、id=3 のテキストを検索します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0 and id = 3;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      
    
    -- 'shandong' または 'university' を含むか、id<2 のテキストを検索します。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0 OR id < 2;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
      8 | ShanDa is a famous university in Shandong.
      1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
  • スコアを返し、上位 3 件を取得します。

    SELECT id,
           content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(content, 'jieba')
      FROM wiki_articles
    ORDER BY score DESC
    LIMIT 3;
    
    -- 結果
    id  |                               content                               |  score  |                     tokenize                     
    ----+---------------------------------------------------------------------+---------+--------------------------------------------------
      8 | ShanDa is a famous university in Shandong.                          | 2.74634 | {shanda,famous,univers,shandong}
      7 | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      3 | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
  • SELECT 句と WHERE 句の両方で TEXT_SEARCH を使用します。

    SELECT id,
           content,
           TEXT_SEARCH(content, 'shandong university') AS スコア,
           TOKENIZE(content, 'jieba')
      FROM wiki_articles
     WHERE TEXT_SEARCH(content, 'shandong university') > 0
    ORDER BY スコア DESC;
    
    -- (結果)
    id  |                               content                               |  スコア  |                     トークン化                     
    ----+---------------------------------------------------------------------+---------+--------------------------------------------------
      7 | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      8 | ShanDa is a famous university in Shandong.                          | 2.74634 | {shanda,famous,univers,shandong}
      3 | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
      2 | Li was born in 1962 in Wendeng County, Shandong.                    | 1.09244 | {li,born,1962,wendeng,counti,shandong}
  • wiki ソースから 'shandong university' に関する最も関連性の高いドキュメントを検索します。

    -- JOIN 用のソーステーブル。
    CREATE TABLE article_source (id int primary key, source text);
    INSERT INTO article_source VALUES (1, 'baike'), (2, 'wiki'), (3, 'wiki'), (4, 'baike'),
                                      (5, 'baike'), (6, 'baike'), (7, 'wiki'), (8, 'paper'),
                                      (9, 'http_log'), (10, 'http_log'), (11, 'http_log');
                                      
    SELECT a.id,
           source, content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(a.content, 'jieba')
      FROM wiki_articles a
      JOIN article_source b
        ON (a.id = b.id)
     WHERE TEXT_SEARCH(a.content, 'shandong university') > 0
       AND b.source = 'wiki'
    ORDER BY score DESC;
    
    -- 結果
    id  | source |                               content                               |  score  |                     tokenize                     
    ----+--------+---------------------------------------------------------------------+---------+--------------------------------------------------
      7 | wiki   | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      3 | wiki   | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
      2 | wiki   | Li was born in 1962 in Wendeng County, Shandong.                    | 1.09244 | {li,born,1962,wendeng,counti,shandong}

ベストプラクティス

Serverless リソースを使用したインデックスの再構築

テーブルプロパティを変更すると、コンパクションとインデックスの再構築がトリガーされ、CPU 消費量が高くなる可能性があります。次のテーブルプロパティを変更するには、以下の手順に従ってください:

  • bitmap_columnsdictionary_encoding_columns、またはベクターインデックスへの変更は、コンパクションとインデックスの再作成をトリガーします。これらの変更には ALTER TABLE xxx SET 構文を避けることを推奨します。代わりに、Serverless Computing リソースで REBUILD 構文を使用してください。詳細については、「REBUILD」をご参照ください。

ASYNC REBUILD TABLE <table_name> 
WITH (
    rebuild_guc_hg_computing_resource = 'serverless'
)
SET (
    bitmap_columns = '<col1>,<col2>',
    dictionary_encoding_columns = '<col1>:on,<col2>:off',
    vectors = '{
    "<col_vector>": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "rabitq",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);
  • JSON 形式データ向けの列指向ストレージまたはフルテキストインデックス列の変更も、コンパクションとインデックスの再構築をトリガーします。これらの変更には REBUILD 構文はまだサポートされていません。代わりに、次のように一時テーブルを作成してください:

BEGIN ;
-- 潜在的な一時テーブルのクリーンアップ
DROP TABLE IF EXISTS <table_new>;
-- 一時テーブルの作成
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
COMMIT ;

-- 対応する列に対して JSON 形式データ向けの列指向ストレージを有効にする
ALTER TABLE <table_new> ALTER COLUMN <column_name> SET (enable_columnar_type = ON);
-- 対応する列にフルテキストインデックスを作成する
CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);

-- 一時テーブルにデータを挿入し、Serverless リソースを使用して実行し、インデックス構築を同期的に完了させる
SET hg_computing_resource = 'serverless';
INSERT INTO <table_new> SELECT * FROM <table>;
ANALYZE <table_new>;

BEGIN ;
-- 古いテーブルの削除
DROP TABLE IF EXISTS  <table>;
-- 一時テーブルの名前を変更
ALTER TABLE <table_new> RENAME TO <table>;
COMMIT ;
  • その他のプロパティ変更 (例:`distribution_key`、`clustering_key`、`segment_key`、ストレージフォーマット) には、Serverless Computing リソースで REBUILD 構文を使用してください。

高度な設定:トークナイザー構成のカスタマイズ

Hologres はデフォルトのトークナイザー構成を使用することを推奨します。ただし、特定のビジネス要件に合わせてカスタマイズする必要がある場合があります。ニーズに合わせてトークナイザーの設定を調整できます。

analyzer_params の要件

analyzer_params 構成の要件:

  • JSON 文字列である必要があります。

  • トップレベルのキーは tokenizer と filter です:

    • filter:オプション。フィルター構成の JSON 配列。フィルターは各トークンに厳密な順序で適用されます。

    • tokenizer:必須。トークナイザー設定の JSON オブジェクト。サポートされているキーは次のとおりです:

      • type:必須。トークナイザー名。

      • その他のトークナイザー固有のパラメーター。詳細については、以下の表をご参照ください。

        トークナイザー

        tokenizer オブジェクトのその他のパラメーター

        パラメーターの説明

        jieba

        mode

        トークン化モードを定義します。

        • search (デフォルト):形態素解析中にすべての可能な組み合わせをリストアップし、冗長性を許容します。たとえば、中国語の「伝統節日」は「伝統」、「節日」、「伝統節日」の 3 つのトークンに分割されます。

        • exact:非冗長な形態素解析を実行します。たとえば、中国語の「伝統節日」は「伝統節日」という 1 つのトークンにのみ分割されます。

        hmm

        隠れマルコフモデル (HMM) を使用して未知語 (OOV) を検出するかどうかを指定します。これにより、新語を認識する能力が向上します。

        • true (デフォルト):使用する

        • false:この値は使用されません。

        standard

        max_token_length

        トークンの最大長。

        正の整数。デフォルト値は 255 です。トークンがこの長さを超えると、max_token_length の間隔で分割されます。

        ik

        mode

        形態素解析モードを定義します。

        • ik_max_word (デフォルト):詳細な形態素解析。すべての可能な短い単語を出力します。たとえば、中国語の「南京市」は「南京」と「市」に分割されます。

        • ik_smart:粗い形態素解析。分割数を減らすために長い単語を優先します。出力トークンは重複しません。数値と数量詞を 1 つのトークンに結合しようとします。たとえば、「南京市」や「1 キロメートル」はさらに分割されません。

        enable_lowercase

        トークンを小文字に変換するかどうかを指定します。

        • true (デフォルト)

        • false

        ngram

        min_ngram

        トークンの最小文字長。

        デフォルト値は 1 です。正の数である必要があります。min_ngram と max_ngram の最大差は 3 です。

        注:次の Grand Unified Configuration (GUC) パラメーターを設定することで、最大差を調整できます。例:SET hg_fulltext_index_max_ngram_diff = 5

        max_ngram

        トークンの最大文字長。

        デフォルト値は 2 です。値の範囲は [1, 255] です。max_ngram と min_ngram の最大差は 3 です。

        説明

        max_ngram と min_ngram の差が大きすぎると、ngram トークナイザーは多くのトークンを生成します。これにより、リソース消費の増加、インデックスストレージの増大、インデックス構築時間の延長につながる可能性があります。

        prefix_only

        プレフィックスのみを考慮するかどうかを指定します。

        • true

        • false (デフォルト)

        pinyin

        keep_first_letter

        各漢字の頭文字を保持するかどうかを指定します。

        • true (デフォルト):「Lǐ Míng」のピンインの形態素解析結果に「lm」が含まれるように、頭文字を保持します。

        • false:項目は保持されません。

        keep_separate_first_letter

        各漢字の頭文字を保持するかどうかを指定します。

        • true:頭文字を個別のトークンとして保持します。たとえば、「Lǐ Míng」のピンインの形態素解析結果には「l」と「m」が含まれます。

        • false (デフォルト):システムは項目を保持しません。

        limit_first_letter_length

        頭文字で構成されるトークンの最大長。

        頭文字の文字列の最大長。値は整数です。デフォルト値は 16 です。

        keep_full_pinyin

        各漢字の完全なピンインを保持するかどうかを指定します。

        • true (デフォルト):完全なピンインを保持します。たとえば、「Lǐ Míng」のピンインの形態素解析結果には「li」と「ming」が含まれます。

        • false:保持は無効になります。

        keep_joined_full_pinyin

        各漢字の完全なピンインを結合するかどうかを指定します。

        • true の場合、ピンインの音節が結合されます。たとえば、「李明」の形態素解析結果には「liming」が含まれます。

        • false (デフォルト):接続は確立されません。

        keep_none_chinese

        結果に非中国語の文字や数字を保持するかどうかを指定します。

        • true (デフォルト):保持します。

        • false:保持しません。

        keep_none_chinese_together

        連続する非中国語の文字や数字を 1 つのトークンとしてまとめて保持するかどうかを指定します。

        • true (デフォルト):まとめて保持します。たとえば、「DJ李明」は「DJ」、「li」、「ming」を含むように形態素解析され、「DJ」は 1 つのトークンです。

        • false:まとめて保持しません。たとえば、「DJ李明」は「D」、「J」、「li」、「ming」を含むように形態素解析されます。

        説明

        このパラメーターは、keep_none_chinese が true に設定されている場合にのみ有効です。

        keep_none_chinese_in_first_letter

        頭文字で構成されるトークンに非中国語の文字や数字を保持するかどうかを指定します。

        • true (デフォルト):保持します。たとえば、「李明AT2025」は「lmat2025」を含むように形態素解析されます。

        • false:保持しません。

        keep_none_chinese_in_joined_full_pinyin

        結合された完全なピンインで構成されるトークンに非中国語の文字や数字を保持するかどうかを指定します。

        • true:保持します。たとえば、「李明AT2025」は「limingat2025」を含むように形態素解析されます。

        • false (デフォルト):保持しません。

        none_chinese_pinyin_tokenize

        非中国語の文字シーケンスが有効なピンイン音節である場合、それを個別のピンイン用語に分割するかどうかを指定します。

        • true (デフォルト):シーケンスを分割します。たとえば、「limingalibaba2025」は「li」、「ming」、「a」、「li」、「ba」、「ba」、「2025」を含むように形態素解析されます。

        • false:シーケンスを分割しません。

        説明

        このパラメーターは、keep_none_chinese と keep_none_chinese_together が true に設定されている場合にのみ有効です。

        keep_original

        元の入力を保持するかどうかを指定します。

        • true:元の入力を保持します。

        • false (デフォルト):元の入力を保持しません。

        lowercase

        非中国語の文字を小文字に変換するかどうかを指定します。

        • true (デフォルト)

        • false

        trim_whitespace

        空白文字をトリミングするかどうかを指定します。

        • true (デフォルト)

        • false

        remove_duplicated_term

        重複する term を削除するかどうかを指定します。

        • true:重複する term を削除します。たとえば、「de的」は「de」に形態素解析されます。ただし、これは「de的」のフレーズクエリの結果に影響を与える可能性があります。

        • false (デフォルト):重複する term を削除しません。

        keep_separate_chinese

        個々の漢字を個別のトークンとして保持するかどうかを指定します。

        • true:個々の文字を保持します。たとえば、「李明」は「李」と「明」の 2 つの個別のトークンとして形態素解析されます。

        • false (デフォルト):値は保持されません。

デフォルトの analyzer_params

各トークナイザーのデフォルトの analyzer_params:

トークナイザー名

デフォルトの analyzer_params

トークン化の例

jieba (デフォルトのトークナイザー)

{
  "tokenizer": {
    "type": "jieba", 
    "mode": "search",
    "hmm": true
  }, 
  "filter": [
    "removepunct",
    "lowercase",
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}
 Spring
 Festival
 ,
 i.e.,
 Lunar
 New
 Year
 ,
 is
 China's
 most
 important
 traditional
 festival
 traditional
 festival
 .

whitespace

{
  "tokenizer": {
    "type": "whitespace"
  }
}
The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.

keyword

{
  "tokenizer": {
    "type": "keyword"
  }
}
The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.

simple

{
  "tokenizer": {
    "type": "simple"
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring
Festival
i.e.,
Lunar
New
Year
is
China's
most
important
traditional
festival

standard

{
  "tokenizer": {
    "type": "standard",
    "max_token_length": 255
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring Festival
also known as
Lunar New Year
is
the most important
traditional festival
in China

icu

{
  "tokenizer": {
    "type": "icu"
  }, 
  "filter": [
    "removepunct",
    "lowercase"
  ]
}
Spring
Festival
,
i.e.,
Lunar
New
Year
,
is
China's
most
important
traditional
festival
.

ik

{
  "tokenizer": {
    "type": "ik",
    "mode": "ik_max_word",
    "enable_lowercase": true
  },
  "filter": [
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}
Spring
Festival
i.e.
Lunar
New
Year
is
China's
most
important
traditional
festival
traditional
festival

ngram

{
  "tokenizer": {
    "type": "ngram",
    "min_gram": 1,
    "max_gram": 2,
    "prefix_only": false
  }
}
Spring Festival, also known as the Lunar New Year, is the most important traditional festival in China.

pinyin

{
  "tokenizer": {
    "type": "pinyin",
    "keep_first_letter": true,
    "keep_separate_first_letter": false,
    "keep_full_pinyin": true,
    "keep_joined_full_pinyin": false,
    "keep_none_chinese": true,
    "keep_none_chinese_together": true,
    "none_chinese_pinyin_tokenize": true,
    "keep_original": false,
    "limit_first_letter_length": 16,
    "lowercase": true,
    "trim_whitespace": true,
    "keep_none_chinese_in_first_letter": true,
    "keep_none_chinese_in_joined_full_pinyin": false,
    "remove_duplicated_term": false,
    "ignore_pinyin_offset": true,
    "fixed_pinyin_offset": false,
    "keep_separate_chinese": false
  }
}
chun
cjjnlxnszgzzydct
jie
ji
nong
li
xin
nian
shi
zhong
guo
zui
zhong
yao
de
chuan
tong
jie
ri

analyzer_params におけるフィルター構成

Hologres は、analyzer_params で次のフィルターをサポートしています。

説明

複数のフィルターを構成した場合、それらは各トークンに厳密な順序で適用されます。

プロパティ名

説明

パラメーターフォーマット

lowercase

トークン内の大文字を小文字に変換します。

lowercase を宣言します。

"lowercase"
  • トークンフィルターのプロパティ定義

    "filter": ["lowercase"]
  • フィルター結果

    ["Hello", "WORLD"]->["hello", "world"]

stop

ストップワードトークンを削除します。


stop_words:ストップワードのリスト。文字列のリストである必要があります。カスタムのストップワードと、一部の言語の組み込み辞書をサポートします:

"_english_"
"_danish_"
"_dutch_"
"_finnish_"
"_french_"
"_german_"
"_hungarian_"
"_italian_"
"_norwegian_"
"_portuguese_"
"_russian_"
"_spanish_"
"_swedish_"
  • トークンフィルターのプロパティ定義

    "filter": [{
      "type": "stop",
      "stop_words": ["_english_", "cat"]
    }]
  • フィルター結果

    ["the", "cat", "is", "on", "a", "mat"]->["mat"]

    説明

    "cat" はカスタムのストップワードです。"the"、"is"、"on"、"a" は組み込みの "_english_" 辞書からのものです。

stemmer

言語ルールに基づいてトークンを語幹に変換します。

language:言語。サポートされている値:

"arabic",
"danish",
"dutch",
"english",
"finnish",
"french",
"german",
"greek",
"hungarian",
"italian",
"norwegian",
"portuguese",
"romanian",
"russian",
"spanish",
"swedish",
"tamil",
"turkish"
  • フィルター定義

    "filter": [{
      "type": "stemmer",
      "language": "english"
    }]
  • トークンフィルタリングの結果

    ["machine", "learning"]->["machin", "learn"]

length

指定された長さを超えるトークンを削除します。

max:許容される最大長。正の整数である必要があります。

{"type": "length", "max": 10}
  • トークンフィルターのプロパティ定義

    "filter": [{"type": "length", "max": 10}]
  • フィルター結果

    ["AI", "for", "Artificial", "Intelligence"]->["AI", "for", "Artificial"]

removepunct

句読文字のみで構成されるトークンを削除します。

removepunct を宣言します。

"removepunct"
説明

バージョン 4.0.8 以降、removepunct は mode パラメーターを追加します。有効な値:

  • if_all (デフォルト):トークンのすべての文字が句読文字である場合にのみトークンを削除します。

  • if_any:トークンに句読文字が含まれている場合にトークンを削除します。

  • トークンフィルタリングプロパティの定義

    "filter": ["removepunct"]
    説明

    "filter": [{"type": "removepunct", "mode": "if_all"}] と同等です。

  • フィルター結果

    ["Chinese", "english", "Chinese。", "english.", "124", "124!=8", "。", "、", ",,", " ..."]->["Chinese", "english", "Chinese。", "english.", "124", "124!=8"]

    "filter": [{"type": "removepunct", "mode": "if_any"}]

    ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] → ["Chinese", "english", "124"]

pinyin

ピンイントークンフィルター。

{
  "type": "pinyin",
  "keep_first_letter": true,
  "keep_separate_first_letter": false,
  "keep_full_pinyin": true,
  "keep_joined_full_pinyin": false,
  "keep_none_chinese": true,
  "keep_none_chinese_together": true,
  "none_chinese_pinyin_tokenize": true,
  "keep_original": false,
  "limit_first_letter_length": 16,
  "lowercase": true,
  "trim_whitespace": true,
  "keep_none_chinese_in_first_letter": true,
  "keep_none_chinese_in_joined_full_pinyin": false,
  "remove_duplicated_term": false,
  "ignore_pinyin_offset": true,
  "fixed_pinyin_offset": false,
  "keep_separate_chinese": false
}

フィルター設定は pinyin トークナイザーの設定と一致します。