全文転置インデックス
バージョン3.3.0以降、StarRocksは全文転置インデックスをサポートしています。これは、テキストをより小さな単語に分割し、各単語について、その単語とデータファイル内の対応する行番号とのマッピング関係を示すインデックスエントリを作成できます。全文検索の場合、StarRocksは検索キーワードに基づいて転置インデックスをクエリし、キーワードに一致するデータ行を迅速に特定します。
プライマリキーテーブルは、v4.0以降、全文転置インデックスをサポートしています。
v4.1以降、StarRocksは組み込みの転置インデックス実装を、デフォルトのCLuceneベースの実装に加えてサポートしています。組み込み実装は、シェアードナッシングとシェアードデータクラスターの両方をサポートしています。詳細については、組み込み転置インデックスを参照してください。
概要
StarRocksは、基盤となるデータを列ごとに整理されたデータファイルに保存します。各データファイルには、インデックス付き列に基づいた全文転置インデックスが含まれています。インデックス付き列の値は個々の単語にトークン化されます。トークン化後の各単語はインデックスエントリとして扱われ、その単語が出現する行番号にマッピングさ れます。現在サポートされているトークン化メソッドは、英語トークン化、中国語トークン化、多言語トークン化、およびトークン化なしです。
例えば、データ行に「hello world」が含まれ、その行番号が123の場合、全文転置インデックスはこのトークン化結果と行番号に基づいてインデックスエントリを構築します: hello->123, world->123。
全文検索中、StarRocksは全文転置インデックスを使用して検索キーワードを含むインデックスエントリを特定し、キーワードが出現する行番号を迅速に見つけることで、スキャンする必要があるデータ行の数を大幅に削減できます。
基本操作
全文転置インデックスの作成
全文転置インデックスを作成する前に、FE構成項目enable_experimental_ginを有効にする必要があります。
ADMIN SET FRONTEND CONFIG ("enable_experimental_gin" = "true");
テーブルに全文転置インデックスを作成する場合、replicated_storage機能を無効にする必要があります。
- v4.0以降では、インデックス作成時にこの機能は自動的に無効になります。
- v4.0より前のバージョンでは、テーブルプロパティ
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: 中国語トークン化。このトークン化メソッドは、chineseCJKアナライザーをCLuceneで使用してトークン化します。: 多言語トークン化。このトークン化メソッドは、文法に基づいたトークン化(standardUnicodeテキストセグメンテーションアルゴリズムに基づく)を提供し、ほとんどの言語や中国語と英語のような混合言語の場合にうまく機能します。例えば、このトークン化メソッドは、中国語と英語が共存する場合に両者を区別できます。英語をトークン化した後、大文字の英字を小文字に変換します。したがって、全文転置インデックスを活用して データ行を特定するには、クエリ条件のキーワードは大文字の英語ではなく小文字の英語である必要があります。インデックス付き列のデータ型は、CHAR、VARCHAR、またはSTRINGである必要があります。
- インデックス付き列のデータ型は、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');