[プレビュー] 全文インバーテッドインデックス
バージョン 3.3.0 以降、StarRocks は全文インバーテッドインデックスをサポートしています。これにより、テキストを小さな単語に分割し、各単語に対するインデックスエントリを作成して、単語とデータファイル内の対応する行番号とのマッピング関係を示すことができます。全文検索では、StarRocks は検索キーワードに基づいてインバーテッドインデックスをクエリし、キーワードに一致するデータ行を迅速に特定します。
全文インバーテッドインデックスは、Primary Key テーブルおよび共有データクラスタではまだサポートされていません。
概要
StarRocks は、基礎となるデータをカラムごとに整理されたデータファイルに格納します。各データファイルには、インデックス化されたカラムに基づく全文インバーテッドインデックスが含まれています。インデックス化されたカラムの値は、個々の単語にトークン化されます。トークン化後の各単語はインデックスエントリとして扱われ、その単語が出現する行番号にマッピングされます。現在サポートされているトークン化方法は、英語トークン化、中国語トークン化、多言語トークン化、およびトークン化なしです。
例えば、データ行に "hello world" が含まれ、その行番号が 123 の場合、全文インバーテッドインデックスはこのトークン化結果と行番号に基づいてインデックスエントリを構築します: hello->123, world->123。
全文検索時、StarRocks は全文インバーテッドインデックスを使用して検索キーワードを含むインデックスエントリを特定し、キーワードが出現する行番号を迅速に見つけることができ、スキャンする必要のあるデータ行の数を大幅に削減します。
基本操作
全文インバーテッドインデックスの作成
全文インバーテッドインデックスを作成する前に、FE 設定項目 enable_experimental_gin
を有効にする必要があります。
ADMIN SET FRONTEND CONFIG ("enable_experimental_gin" = "true");
また、全文インバーテッドインデックスは重複キーテーブルでのみ作成でき、テーブルプロパティ replicated_storage
は false
である必要があります。
テーブル作成時に全文インバーテッドインデックスを作成
カラム v
に英語トークン化を使用して全文インバーテッドインデックスを作成します。
CREATE TABLE `t` (
`k` BIGINT NOT NULL COMMENT "",
`v` STRING COMMENT "",
INDEX idx (v) USING GIN("parser" = "english")
) ENGINE=OLAP
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replicated_storage" = "false"
);
parser
パラメータはトークン化方法を指定します。サポートされている値と説明は以下の通りです:none
(デフォルト): トークン化なし。インデックス化されたカラムのデータ全体が全文インバーテッドインデックスが構築される際に単一のインデックス項目として扱われます。english
: 英語トークン化。このトークン化方法は通常、非アルファベット文字でトークン化します。また、大文字の英語文字は小文字に変換されます。したがって、クエリ条件のキーワードは大文字の英語ではなく小文字の英語である必要があります。chinese
: 中国語トークン化。このトークン化方法は、CLucene の CJK Analyzer を使用します。standard
: 多言語トークン化。このトークン化方法は、文法に基づくトークン化(Unicode Text Segmentation algorithm に基づく)を提供し、ほとんどの言語や混合言語のケースに適しています。例えば、このトークン化方法は、中国語と英語が共存する場合にこれらの言語を区別できます。英語をトークン化した後、大文字の英語文字を小文字に変換します。したがって、クエリ条件のキーワードは大文字の英語ではなく小文字の英語である必要があります。
- インデックス化されたカラムのデータ型は CHAR、VARCHAR、または STRING でなければなりません。
テーブル作成後に全文インバーテッドインデックスを追加
テーブル作成後、ALTER TABLE ADD INDEX
または CREATE INDEX
を使用して全文インバーテッドインデックスを追加できます。
ALTER TABLE t ADD INDEX idx (v) USING GIN('parser' = 'english');
CREATE INDEX idx ON t (v) USING GIN('parser' = 'english');
全文インバーテッドインデックスの管理
全文インバーテッドインデックスの表示
SHOW CREATE TABLE
を実行して全文インバーテッドインデックスを表示します。
MySQL [example_db]> SHOW CREATE TABLE t\G