CREATE CUSTOM INDEX (SASI)

1つのテーブル・カラムに対してSASIインデックスを生成します(試験段階)。

テーブル・カラムに対してSSTable Attached Secondary Index(SASI)を生成します。
注: DSEにおけるSASIインデックスの使用は試験段階です。DataStaxでは、実稼働環境ではSASIインデックスをサポートしていません。
SASIを使用すると、メモリー、ディスク、およびCPUリソースの使用量が大幅に低下します。SASIでは、文字列に対するPREFIXおよびCONTAINSを使用したクエリーが可能で、LIKE = "foo*"LIKE = "*foo*"のSQL実装に似ています。

SASIについての詳細は、「SASIの使用」を参照してください。

構文

CREATE CUSTOM INDEX [IF NOT EXISTS] [index_name]
ON [keyspace_name.]table_name ( column_name )
USING 'org.apache.cassandra.index.sasi.SASIIndex' 
[WITH OPTIONS = { option_map }]
表 1. 凡例
構文規則 説明
大文字 リテラル・キーワード。
小文字 リテラル以外。
イタリック体 変数値。ユーザー定義値と置き換えます。
[] 任意。角かっこ( [] )で任意指定のコマンド引数を囲みます。角かっこは入力しないでください。
( ) グループ。丸かっこ(( ))は、選択肢を含むグループを示します。丸かっこは入力しないでください。
| または。縦棒( | )で代替要素を区切ります。要素のいずれかを入力してください。縦棒は入力しないでください。
... 繰り返し可能。省略記号(...)は、構文要素を必要な回数だけ繰り返すことができることを示します。
'Literal string' 単一引用符( ' )でCQL文内のリテラル文字を囲みます。大文字を維持するには、単一引用符を使用します。
{ key : value } マップ・コレクション。中かっこ( { } )でマップ・コレクションまたはキーと値のペアを囲みます。コロンでキーと値を区切ります。
<datatype1,datatype2> セット、リスト、マップ、またはタプル。山かっこ(< >)で、セット、リスト、マップまたはタプル内のデータ型を囲みます。データ型はコンマで区切ります。
cql_statement; CQL文の終了。セミコロン( ; )ですべてのCQL文を終了します。
[--] コマンドライン・オプションとコマンド引数は、2つのハイフン(--)で区切ります。この構文は、引数がコマンドライン・オプションと間違われる可能性がある場合に役立ちます。
' <schema> ...</schema> ' 検索CQLのみ:単一引用符( ' )でXMLスキーマ宣言全体を囲みます。
@xml_entity='xml_entity_type' 検索CQLのみ:スキーマ・ファイルおよびsolrConfigファイル内のXML要素を上書きするための実体とリテラル値を示します。
index_name
任意指定のインデックス識別子。名前が指定されていない場合は、デフォルトのtable_name_column_name_idxが使用されます。特殊文字を使用する場合や大文字と小文字の区別を維持する場合は、引用符で囲みます。
OPTIONS

単純なJSON形式でオプションを定義します。

アナライザーを指定すると、以下の操作が可能です。
  • テキスト・カラム・データの分析とインデックスの作成
  • ワード・ステミングを使用したインデックスの作成
  • スキップ可能な単語の指定
  • 特定の言語に基づいたローカライズの適用
  • 大文字と小文字の正規化(非トークン化アナライザーなど)

アナライザー・クラスのオプション

SASIインデクサーには、2つのアナライザー・クラス(analyzer_class)があります。
  • org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer(デフォルトのアナライザー)
  • org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer
クラスを指定します。
'class' : 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer'

両方に適用されるグローバル・オプションと、クラス指定オプションとして標準アナライザー非トークン化アナライザーがあります。

グローバル・オプション

次のオプションはすべてのアナライザー・クラスに適用されます。
オプション 説明
analyzed Trueの場合、指定したアナライザーを使用してリテラル・カラムが分析されています。
is_literal カラムにリテラルを指定します。
max_compaction_flush_memory_in_mb サイズを入力します。

標準アナライザーのオプション

デフォルトのアナライザー・クラス。次のオプションはorg.apache.cassandra.index.sasi.analyzer.StandardAnalyzerに使用できます。
オプション 説明
tokenization_enable_stemming 単語を基本形式に短縮します。たとえば、「stemmer」、「stemming」、「stemmed」などの基本形式は「stem」です。デフォルト:false
tokenization_skip_stop_words 無視する単語のコンマ区切りリスト(「and」、「the」、「or」など)。
tokenization_locale カラムの言語コード。ローカライズ・コードのリストを参照してください。デフォルト:en
tokenization_normalize_lowercase 小文字を使用します。デフォルト:false
tokenization_normalize_uppercase 大文字を使用します。デフォルト:false

非トークン化アナライザーのオプション

次のオプションはorg.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzerに使用できます。
オプション 説明
normalize_lowercase すべての文字列を小文字としてインデックスを作成します。デフォルト:false
normalize_uppercase すべての文字列を大文字としてインデックスを作成します。デフォルト:false
case_sensitive 照合する際に大文字と小文字を区別しません。デフォルトでは大文字と小文字を区別してインデックスを作成します。設定:true

カラムに対するSASI PREFIXインデックスの作成

テーブルを定義し、カラムfirstnameに対してSASIインデックスを作成します。

CREATE TABLE cycling.cyclist_name ( 
  id UUID PRIMARY KEY, 
  lastname text, 
  firstname text
);

CREATE CUSTOM INDEX  fn_prefix ON cyclist_name (firstname) USING 'org.apache.cassandra.index.sasi.SASIIndex';

SASIモードPREFIXはデフォルトで、指定する必要はありません。

カラムに対するSASI CONTAINSインデックスの作成

テーブルを定義し、カラムfirstnameに対してSASIインデックスを作成します。

CREATE CUSTOM INDEX  fn_contains ON cyclist_name (firstname) 
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'CONTAINS' };
SASIモードCONTAINSを指定する必要があります。

カラムに対するSASI SPARSEインデックスの作成

テーブルを定義し、カラムageに対してSASIインデックスを作成します。

CREATE CUSTOM INDEX  fn_contains ON cyclist_name (age) 
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 'mode': 'SPARSE' };
SASIモードSPARSEを指定する必要があります。このモードは、タイムスタンプまたはミリ秒センサー読み取り値を格納する密度の高い数値カラムに使用します。

非トークン化アナライザーを使用した、カラムに対するSASI PREFIXインデックスの作成

テーブルを定義し、カラムageに対してSASIインデックスを作成します。

CREATE CUSTOM INDEX  fn_contains ON cyclist_name (age) 
USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = { 
   'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer',
   'case_sensitive': 'false'};
非トークン化アナライザーを使用すると、指定したカラムを分析せずに大文字と小文字の区別または大文字と小文字の正規化を指定できます。

カラムに対するSASI分析インデックスの作成

テーブルを定義し、カラムageに対してSASIインデックスを作成します。

CREATE CUSTOM INDEX stdanalyzer_idx ON cyclist_name (comments) USING 'org.apache.cassandra.index.sasi.SASIIndex'
WITH OPTIONS = {
'mode': 'CONTAINS',
'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer',
'analyzed': 'true',
'tokenization_skip_stop_words': 'and, the, or',
'tokenization_enable_stemming': 'true',
'tokenization_normalize_lowercase': 'true',
'tokenization_locale': 'en'
};