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

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

最終更新日:Jan 16, 2026

Hologres は V4.0 以降で全文転置インデックスをサポートしています。この機能は、パフォーマンス専有型の全文検索エンジン Tantivy 上に構築されています。高性能な取得を提供し、BM25 類似度スコアリングアルゴリズムをサポートしており、ドキュメントのソート、キーワード検索、フレーズ検索などの機能を実現します。

仕組み

ソーステキストを Hologres に書き込むと、インデックス構成に基づいて、データファイルごとに全文転置インデックスファイルが構築されます。このプロセスでは、トークナイザーがテキストをトークンにセグメント化します。次に、インデックスは各トークンとソーステキストとのマッピング、およびその位置、term frequency、その他の関連情報を記録します。

テキスト検索中、検索クエリはまず一連のクエリトークンにセグメント化されます。その後、BM25 アルゴリズムが各ソーステキストとクエリトークンのセットとの間の関連度スコアを計算します。このメソッドは、高性能かつ高精度の全文検索を提供します。

注意事項

  • 全文転置インデックスは、Hologres V4.0 以降の列指向テーブルと行列ハイブリッドテーブルでのみサポートされています。行指向テーブルはサポートされていません。

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

  • 全文転置インデックスは、単一の列にのみ構築できます。各列は 1 つの全文転置インデックスのみをサポートします。複数の列にインデックスを作成するには、列ごとに個別のインデックスを作成する必要があります。

  • 全文転置インデックスを作成した後、既存のデータと新しくインポートされたバッチデータのインデックスファイルは、コンパクションプロセス中に非同期で構築されます。インデックスファイルが構築されるまで、データの BM25 関連度スコアは 0 です。

  • 全文転置インデックス作成後のリアルタイムデータ書き込みの動作は、バージョンによって異なります。Hologres V4.0.8 より前では、インデックスはリアルタイムデータ書き込み中に同期的に構築されていました。V4.0.8 以降では、リアルタイム書き込みの効率とインデックス構築のパフォーマンスを向上させるために、システムはメモリ内リアルタイムインデックスを 1 秒ごとに非同期でリフレッシュします。リフレッシュが完了した後にのみ、インデックスを使用してデータをクエリできます。

  • 全文検索は、全文転置インデックスを持つ列でのみサポートされています。インデックスのない列での総当たり計算はサポートされていません。

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

    VACUUM <schema_name>.<table_name>;
  • BM25 検索アルゴリズムは、ファイルレベルで関連度スコアを計算します。少量のデータをインポートする場合は、手動でコンパクションをトリガーしてファイルをマージできます。これにより、検索精度が向上します。

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

  • 次の表の説明に従って、シナリオに基づいてトークナイザーを選択してください:

    シナリオ

    トークナイザー

    注意事項

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

    Jieba

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

    説明的な中国語テキストの検索

    IK

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

    英語タイトルの検索

    Simple、Whitespace、Standard

    シンプルで効率的です。対象の英語テキストに基づいて必要に応じて使用します。

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

    Ngram

    辞書を必要としません。あいまいなテキストクエリのニーズを満たします。

    中国語の製品名または人名の Pinyin 検索

    Pinyin

    完全な Pinyin、頭文字、多音字の派生など、さまざまな中国語 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

全文転置インデックスのパラメーターを構成します。次の 2 種類のパラメーターが利用可能です:

  • tokenizer:トークナイザー名。次のトークナイザーがサポートされています:

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

    • whitespace:空白トークナイザー。テキストをスペースでセグメント化します。

    • standard:標準トークナイザー。Unicode 標準 Annex #29 に基づいてテキストをセグメント化します。

    • simple:シンプル トークナイザー。テキストをスペースと句読点でセグメント化します。

    • keyword:キーワード トークナイザー。操作を行わず、元のテキストを出力します。

    • icu:多言語テキスト処理用のトークナイザー。

    • ik:IK Analyzer に基づく中国語トークナイザー。英語の単語、メールアドレス、URL (:// なし)、IP アドレスなどの特殊なフォーマットを自動的に識別できます。Hologres V4.0.9 以降でサポートされています。

    • ngram:文字ベースのスライドウィンドウ トークナイザー。テキストを連続した n-gram (n 個の文字または単語のシーケンス) に分割して、検索システムの取得率とあいまい一致機能を向上させます。`like` および `ilike` のあいまい一致シナリオを高速化するのに適しています。Hologres V4.0.9 以降でサポートされています。

    • pinyin:Pinyin トークナイザー。テキスト内の中国語の文字や単語の Pinyin を生成します。また、より正確な Pinyin 生成と高い検索取得率を達成するために、非中国語文字列の Pinyin 分割と派生もサポートします。Hologres V4.0.9 以降でサポートされています。

  • analyzer_params:トークナイザーの構成。JSON 形式の文字列のみがサポートされています。

    • 各トークナイザーにはデフォルトの analyzer_params 構成があります。ほとんどの場合、デフォルトの構成を使用します。analyzer_params パラメーターを明示的に構成せずに、tokenizer パラメーターを指定するだけで済みます。

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

説明

同じインデックス内で設定できるトークナイザーと analyzer_params は 1 種類のみです。

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

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

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • カスタム トークナイザー構成を明示的に指定します:Jieba トークナイザー + 精確モード + 大文字小文字変換用の小文字フィルターのみ。

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
説明
  • 全文転置インデックスを作成した後、インデックスファイルはデータインポート後のコンパクションプロセス中に構築されます。

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

  • Serverless リソースを使用しない場合は、次のコマンドを手動で実行してコンパクションをトリガーする必要があります。詳細については、「コンパクション (ベータ)」をご参照ください。

    VACUUM <schema_name>.<table_name>;

インデックスの変更

構文

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

-- デフォルト構成へのリセット
ALTER INDEX [ IF EXISTS ] <index_name> RESET ( <storage_parameter> [ , ... ] );

パラメーター

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

説明

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

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

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • インデックストークナイザーを IK に変更し、ik_max_word モードを使用し、小文字変換を無効にし、フィルターを追加しません。

    ALTER INDEX idx1 SET (
      tokenizer = 'jieba',
      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);

インデックスの削除

構文

DROP INDEX [ IF EXISTS ] <index_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:フレーズ検索。フレーズ内の単語間の距離は、options パラメーターで slop を指定して構成します。デフォルトは 0 で、フレーズ内の単語が隣接している必要があることを意味します。

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

  • term:term 検索。search_expression に対してトークン化やその他の処理を行いません。インデックス内で直接完全一致検索を実行します。

operator

いいえ

キーワード間の論理演算子。このパラメーターは、mode が match に設定されている場合にのみ有効です。次の値がサポートされています:

  • OR (デフォルト):検索オブジェクトに複数のトークンがある場合、いずれかのトークンが一致すれば一致が返されます。

  • AND:検索オブジェクトに複数のトークンがある場合、すべてのトークンが一致した場合にのみ一致が返されます。

tokenizeranalyzer_params

いいえ

search_expression に使用されるトークナイザーと構成。通常、これらのパラメーターを構成する必要はありません。

  • 指定しない場合、デフォルトで search_data 列の全文転置インデックスと同じトークナイザーと構成が使用されます。検索ソースが定数の場合、デフォルトのトークナイザーである Jieba が使用されます。

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

options

いいえ

全文検索のその他のパラメーター。入力フォーマットは 'key1=v1;key2=v2;....;keyN=vN;' です。

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

説明

slop は、フレーズを構成する単語間で許容される最大ギャップ (または転置オーバーヘッド) を表します。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;
  • term 検索モードを使用します。

    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 フィールドが含まれており、SQL 文が全文転置インデックスを正常に使用したことを示しています。

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 largest river and the third longest river in the world, with a total length of about 6,300 kilometers.'),
  (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, the Lunar New Year, is the most important traditional festival in China.'),
  (5, 'The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year''s Eve dinner, and making New Year visits.'),
  (6, 'In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.'),
  (7, 'Shandong has dozens of universities.'),
  (8, 'ShanDa is a famous university of Shandong.');

-- コンパクション
VACUUM wiki_articles;

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

結果の例は次のとおりです:

id |                       content                       
---+---------------------------------------------------
 1 | The Yangtze River is China's largest river and the third longest river in the world, with a total length of about 6,300 kilometers.

さまざまな検索例

  • キーワード一致

    -- (K1) キーワード一致 (デフォルトの operator=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 of Shandong.
    
    -- (K2) キーワード一致 (operator=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 of 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 が 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 of Shandong.
    (3 rows)
    
    -- (P4) standard トークナイザーインデックスでの動作。(ALTER INDEX ft_idx_1 SET (tokenizer = 'standard');)
    --      standard トークナイザーの場合、slop はトークン単位で計算されます。
    --      間に 0 個のトークンがある限り、スペースの数に関係なくフレーズ一致と見なされます。
    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 トークナイザーの例)
    --      テキストに 'long river' と 'total length' の間にカンマがあり、クエリ文字列にピリオドがあっても。
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'long river.total length', mode => 'phrase') > 0;
    
    -- 結果
     id |                       content                       
    ----+-----------------------------------------------------
      1 | The Yangtze River is China's largest river and the third longest river in the world, with a total length of about 6,300 kilometers.
    (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 of Shandong.
    
    -- (N2) 自然言語クエリ:キーワード一致。ドキュメントに 'shandong' と 'university' の両方が含まれているか、'heritage' が含まれている場合に一致します。AND オペレーターは OR オペレーターよりも優先順位が高いです。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(shandong AND university) OR heritage', 'natural_language') > 0;
    -- 同等
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong AND university OR heritage', 'natural_language') > 0;
    -- 同等
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(+shandong +university) heritage', 'natural_language') > 0;
    
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university of 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 one of the first national intangible cultural heritages.
    
    -- (N3) 自然言語クエリ:キーワード一致。'shandong' を含み、'university' を含まず、'heritage' を含む可能性があります。
    --      このクエリでは、キーワード 'heritage' の前に + または - 記号がありません。これはどの行が一致するかに影響しませんが、一致スコアには影響します。'heritage' を含むドキュメントはより高いスコアになります。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '+shandong -university heritage', 'natural_language') > 0;
     id |                     content                      
    ----+--------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
    
    -- 'shandong' を含み、'physics' を含まず、'famous' を含む可能性があります。'famous' を含むドキュメントはより高い関連度スコアを持ちます。
    -- 注:このクエリは単一シャードで計算されたスコアを示しています。計算された BM25 スコアは、シャード数やファイル編成が異なると変わる可能性があります。
    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 of 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) 自然言語クエリ:フレーズ検索。これは (P2) と同等です。~ 構文は slop の設定をサポートします。
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"~23', 'natural_language') > 0;
            
    -- 結果
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university of 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 largest river and the third longest river in the world, with a total length of about 6,300 kilometers.
      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, the Lunar New Year, is the most important traditional festival in China.
      5 | The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year's Eve dinner, and making New Year visits.
      6 | In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university of Shandong.
  • term クエリ

    -- (T1) term クエリ:トークン化結果に明示的に "Spring Festival" が含まれているため、取得できます。
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'Spring Festival', 'term') > 0;
    
    -- 結果         
     id |                                           content                                            
    ----+----------------------------------------------------------------------------------------------
      4 | The Spring Festival, the Lunar New Year, is the most important traditional festival in China.
      5 | The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year's Eve dinner, and making New Year visits.
      6 | In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.
    
    
    -- (T2) term クエリ:結果が返されないクエリの例。
    -- ソーステーブル wiki_articles の content 列はデフォルトで Jieba トークナイザーを使用するため、"shandong university" は分割されます。
    -- このシナリオでは、keyword トークナイザーを使用した term クエリで対象データを取得します。
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'shandong university', 'term') > 0;
    
    -- 結果         
     id | content 
    ----+---------

複雑なクエリの例

  • クエリとプライマリキーを組み合わせます。

    -- '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 of Shandong.
      1 | The Yangtze River is China's largest river and the third longest river in the world, with a total length of about 6,300 kilometers.
      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 of 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}
  • 出力句と WHERE 句の両方で TEXT_SEARCH 関数を使用します。

    SELECT id,
           content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(content, 'jieba')
      FROM wiki_articles
     WHERE TEXT_SEARCH(content, 'shandong university') > 0
    ORDER BY score DESC;
    
    -- 結果
    id  |                               content                               |  score  |                     tokenize                     
    ----+---------------------------------------------------------------------+---------+--------------------------------------------------
      7 | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      8 | ShanDa is a famous university of 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}

さまざまなトークナイザーの例

  • デフォルトの Jieba トークナイザーを使用します。デフォルトの検索モードでは、検索結果を向上させるためにより多くの単語形式が生成されます。

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba');
    
    -- 結果
                    tokenize                
    --------------------------------------
    {he,came,to,beijing,tsinghua,hua,university,tsinghua university}
  • カスタムの Jieba トークナイザーを精確モードで使用します。これにより、余分な単語形式は生成されません。

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba', '{"tokenizer": {"type": "jieba", "mode": "exact"}}');
    
    -- 結果
            tokenize         
    -----------------------
    {he,came,to,beijing,tsinghua university}
  • トークナイザーの比較 (それぞれデフォルト構成)。

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba') as jieba,
           TOKENIZE('He came to Beijing Tsinghua University', 'ik') as ik,
           TOKENIZE('He came to Beijing Tsinghua University', 'keyword') as keyword,
           TOKENIZE('He came to Beijing Tsinghua University', 'whitespace') as whitespace,
           TOKENIZE('He came to Beijing Tsinghua University', 'simple') as simple,
           TOKENIZE('He came to Beijing Tsinghua University', 'standard') as standard,
           TOKENIZE('He came to Beijing Tsinghua University', 'icu') as icu,
           TOKENIZE('He came to Beijing Tsinghua University', 'ngram') as ngram,
           TOKENIZE('He came to Beijing Tsinghua University', 'pinyin') as pinyin;
             
    -- 結果
    -[ RECORD 1 ]--------------------------------------------------------------------
    jieba      | {he,came,to,beijing,tsinghua,hua,university,tsinghua university}
    ik         | {he,came,to,beijing,tsinghua university,tsinghua,university}
    keyword    | {He came to Beijing Tsinghua University}
    whitespace | {He,came,to,Beijing,Tsinghua,University}
    simple     | {he,came,to,beijing,tsinghua,university}
    standard   | {he,came,to,beijing,tsinghua,university}
    icu        | {he,came,to,beijing,tsinghua,university}
    ngram      | {h,he,e,"e ",c,ca,a,am,m,me,e,"e ",t,to,o,"o ",b,be,e,ei,i,ij,j,ji,i,in,n,ng,g,"g ",t,ts,s,si,i,in,n,ng,g,gh,h,hu,u,ua,a,"a ",u,un,n,ni,i,iv,v,ve,e,er,r,rs,s,si,i,it,t,ty,y}
    pinyin     | {ta,tldbjqhdx,lai,dao,bei,jing,qing,hua,da,xue}
  • http_logs に対するトークン化効果の比較。

    SELECT TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'jieba') as jieba,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'ik') as ik,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'keyword') as keyword,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'whitespace') as whitespace,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'simple') as simple,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'standard') as standard,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'icu') as icu,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'ngram') as ngram,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'pinyin') as pinyin;
           
    -- 返された結果       
    -[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    jieba      | {211.11,9.0,1998-06,21t15,00,01-05,00,get,english,index,html,http,1.0,304,0}
    ik         | {211.11.X.X,1998-06-21t15,1998,06,21,t,15,00,01-05,01,05,00,get,english,index.html,index,html,http,1.0,304,0}
    keyword    | {"211.11.X.X - - [1998-06-21T15:00:01-05:00] \\\"GET /english/index.html HTTP/1.0\\\" 304 0"}
    whitespace | {211.11.X.X,-,-,[1998-06-21T15:00:01-05:00],"\\\"GET",/english/index.html,"HTTP/1.0\\\"",304,0}
    simple     | {211,11,9,0,1998,06,21t15,00,01,05,00,get,english,index,html,http,1,0,304,0}
    standard   | {211.11.X.X,1998,06,21t15,00,01,05,00,get,english,index.html,http,1.0,304,0}
    icu        | {211.11.X.X,1998,06,21t15,00,01,05,00,get,english,index.html,http,1.0,304,0}
    ngram      | {2,21,1,11,1,1.,.,.1,1,11,1,1.,.,.9,9,9.,.,.0,0,"0 "," "," -",-,"- "," "," -",-,"- "," "," [",[,[1,1,19,9,99,9,98,8,8-,-,-0,0,06,6,6-,-,-2,2,21,1,1T,T,T1,1,15,5,5:,:,:0,0,00,0,0:,:,:0,0,01,1,1-,-,-0,0,05,5,5:,:,:0,0,00,0,0],],"] "," "," \\","\\","\\\"","\"","\"G",G,GE,E,ET,T,"T "," "," /",/,/e,e,en,n,ng,g,gl,l,li,i,is,s,sh,h,h/,/,/i,i,in,n,nd,d,de,e,ex,x,x.,.,.h,h,ht,t,tm,m,ml,l,"l "," "," H",H,HT,T,TT,T,TP,P,P/,/,/1,1,1.,.,.0,0,"0\\","\\","\\\"","\"","\" "," "," 3",3,30,0,04,4,"4 "," "," 0",0}
    pinyin     | {211119019980621,211119019980621t,t,1500010500,ge,teng,li,shi,n,de,x,h,t,m,l,h,t,t,p,103040}

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

Hologres はデフォルトのトークナイザー構成の使用を推奨します。ただし、デフォルトの構成がビジネス要件を満たさない場合は、トークナイザー構成をカスタマイズして、より柔軟なトークン化を行うことができます。

analyzer_params の構成要件

analyzer_params パラメーターの構成要件は次のとおりです:

  • JSON 形式の文字列のみがサポートされています。

  • JSON のトップレベルは、tokenizer と filter の 2 つのキーをサポートします。値は次のように記述されます:

    • filter:オプション。値は、トークンフィルタリングプロパティを構成するために使用される JSON 配列です。複数のトークンフィルタリングプロパティを構成する場合、それらは指定された順序で各トークンに適用されます。

    • tokenizer:必須。値は、トークナイザープロパティを構成するために使用される JSON オブジェクトです。JSON オブジェクトは次のキーをサポートします:

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

      • tokenizer オブジェクトのその他のパラメーター。サポートされるパラメーターは、次の表に示すように、トークナイザーによって異なります:

        トークナイザー

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



        パラメーターの説明

        パラメーター値

        jieba

        mode

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

        • search (デフォルト):トークン化中に複数の可能な組み合わせをリストし、冗長性を許容します。たとえば、「traditional festival」のトークン化結果は「traditional」、「festival」、「traditional festival」です。

        • exact:トークン化中に冗長な分割を行いません。たとえば、「traditional festival」のトークン化結果は「traditional festival」です。

        hmm

        隠れマルコフモデル (HMM) を使用して辞書にない単語を識別するかどうかを指定します。これにより、新語の認識が向上します。

        • true:機能が有効になります。これがデフォルト値です。

        • false:この設定は無効です。

        standard

        max_token_length

        トークンの最大長。

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

        ik

        mode

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

        • ik_max_word (デフォルト):細粒度のトークン化を実行し、すべての可能な短い単語を出力します。たとえば、「Nanjing City」のトークン化結果は「Nanjing」と「City」です。

        • ik_smart:粗粒度のトークン化を実行します。このモードは、分割数を減らすために長い単語を優先します。出力トークンは重複しません。数値と数量詞を単一のトークンに結合しようとします。たとえば、「Nanjing City」と「1 kilometer」はさらにトークン化されません。

        enable_lowercase

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

        • true (デフォルト)

        • false

        ngram

        min_ngram

        トークンの最小長 (文字数)。

        正の整数。デフォルト値は 1 です。この値と max_ngram の最大差は 3 です。

        注:次の GUC を設定することで、最大差の値を調整できます。例:SET hg_fulltext_index_max_ngram_diff = 5

        max_ngram

        トークンの最大長 (文字数)。

        デフォルト値は 2 です。値は [1, 255] の範囲内である必要があります。この値と min_ngram の最大差は 3 です。

        説明

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

        prefix_only

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

        • true

        • false (デフォルト)

        pinyin

        keep_first_letter

        各中国語文字の Pinyin の頭文字を保持するかどうかを指定します。

        • true (デフォルト):頭文字を保持します。たとえば、「李明」(Li Ming) のトークン化結果には「lm」が含まれます。

        • false:保持されません。

        keep_separate_first_letter

        各中国語文字の Pinyin の頭文字を個別のトークンとして保持するかどうかを指定します。

        • true:頭文字を個別のトークンとして保持します。たとえば、「李明」(Li Ming) のトークン化結果には「l」と「m」が含まれます。

        • false (デフォルト):アイテムは保持されません。

        limit_first_letter_length

        頭文字を含むトークンの最大長。

        保持される頭文字文字列の最大長。整数。デフォルトは 16 です。

        keep_full_pinyin

        各中国語文字の完全な Pinyin を個別のトークンとして保持するかどうかを指定します。

        • true (デフォルト):Pinyin の音節を個別のトークンとして保持します。たとえば、「李明」(Li Ming) のトークン化結果には「li」と「ming」が含まれます。

        • false:アイテムは保持されません。

        keep_joined_full_pinyin

        すべての中国語文字の完全な Pinyin を単一のトークンに結合するかどうかを指定します。

        • true:Pinyin の音節を単一のトークンに結合します。たとえば、「李明」(Li Ming) のトークン化結果には「liming」が含まれます。

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

        keep_none_chinese

        トークン化結果に非中国語の文字または数字を保持するかどうかを指定します。

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

        • false:保持しません。

        keep_none_chinese_together

        連続する非中国語の文字または数字を単一のトークンとして一緒に保持するかどうかを指定します。

        • true (デフォルト):連続する非中国語テキストを一緒に保持します。たとえば、「DJ李明」(DJ Li Ming) のトークン化結果には「DJ」、「li」、「ming」が含まれ、「DJ」は単一のトークンです。

        • false:連続する非中国語テキストを分割します。たとえば、「DJ李明」(DJ Li Ming) のトークン化結果には「D」、「J」、「li」、「ming」が含まれます。

        説明

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

        keep_none_chinese_in_first_letter

        頭文字を含むトークンに非中国語の文字または数字を含めるかどうかを指定します。

        • true (デフォルト):Pinyin の頭文字を非中国語テキストと連結します。たとえば、「李明AT2025」(Li Ming AT2025) のトークン化結果にはトークン「lmat2025」が含まれます。

        • false:保持しません。

        keep_none_chinese_in_joined_full_pinyin

        結合された完全な Pinyin トークンに非中国語の文字または数字を含めるかどうかを指定します。

        • true:完全な Pinyin を非中国語テキストと連結します。たとえば、「李明AT2025」(Li Ming AT2025) のトークン化結果にはトークン「limingat2025」が含まれます。

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

        none_chinese_pinyin_tokenize

        非中国語の文字が Pinyin の音節を形成する場合、それらを個別の Pinyin term に分割するかどうかを指定します。

        • 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

        重複するトークンを削除するかどうかを指定します。

        • true:重複するトークンを削除します。たとえば、「de的」のトークン化結果は「de」です。ただし、これは「de的」のフレーズクエリの結果に影響します。

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

        keep_separate_chinese

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

        • true:単一の文字を個別のトークンとして保持します。たとえば、「李明」(Li Ming) のトークン化結果には「李」と「明」の 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, also known as the Lunar New Year, is the most important traditional festival in China.

whitespace

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

keyword

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

simple

{
  "tokenizer": {
    "type": "simple"
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring Festival
Also known as the Lunar New Year
The most important traditional festival in China

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"
  ]
}
The Spring Festival, also known as the Lunar New Year, is the most important traditional festival in China.

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., the Lunar New Year, is China's most important 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"
説明

V4.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

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 トークナイザーと同じです。