我一直在查看CQL 3.0 数据建模文档,该文档描述了带有标签的列系列歌曲,如下所示:
CREATE TABLE songs ( id uuid PRIMARY KEY, title text, tags set);
我想获得所有具有特定标签的歌曲的列表,因此我需要添加适当的索引.
我可以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问题CASSANDRA-4511,看起来这可以在更高版本的Cassandra(2.1)中修复.我目前正在使用Apache Cassandra 1.2.11,但不想升级.根据发行CASSANDRA-5615虽然在卡桑德拉1.2.6存在是支持自定义索引的集合.
问题是,唯一可用的文档说明:
Cassandra支持创建自定义索引,该索引供内部使用且超出本文档的范围.
但是,它确实暗示的语法如下:
CREATE CUSTOM INDEX ON songs ( tags ) USING 'class_name';
什么是class_name
我们在本CQL语句中指定?
有没有更好的方法来索引标签,以便我可以在歌曲表中查询具有特定标签的歌曲列表?