私は、次のように作成された、タグ付きの曲の列ファミリーを説明するCQL 3.0データ モデリング ドキュメントを見てきました。
CREATE TABLE songs (
id uuid PRIMARY KEY,
title text,
tags set<text>
);
特定のタグを持つすべての曲のリストを取得したいので、適切なインデックスを追加する必要があります。
title
列に簡単にインデックスを作成できますtags
が、コレクションである列にインデックスを付けようとすると、次のようになります。
CREATE INDEX ON songs ( tags );
DataStax Java ドライバー 1.0.4 から次のエラーが発生します。
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Indexes on collections are no yet supported
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:269)
これは、JIRA issue CASSANDRA-4511によると、Cassandra (2.1) の以降のバージョンで修正される可能性があるようです。ただし、現在 Apache Cassandra 1.2.11 を使用しており、まだアップグレードしたくありません。問題CASSANDRA-5615によると、Cassandra 1.2.6ではコレクションのカスタム インデックスがサポートされています。
問題は、入手可能な唯一のドキュメントに次のように記載されていることです。
Cassandra は、カスタム インデックスの作成をサポートしていますが、これは内部使用のためのものであり、このドキュメントの範囲外です。
ただし、次の構文が推奨されます。
CREATE CUSTOM INDEX ON songs ( tags ) USING 'class_name';
class_name
この CQL ステートメントで指定されているのは何ですか?
特定のタグを持つ曲のリストを曲テーブルに照会できるように、タグのインデックスを作成するより良い方法はありますか?