【发布时间】:2013-12-24 09:39:51
【问题描述】:
我一直在查看 CQL 3.0 data modelling documentation,它描述了一个带有标签的歌曲列族,创建如下:
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 问题 CASSANDRA-4511,这看起来可能会在更高版本的 Cassandra (2.1) 中得到修复。但是,我目前正在使用 Apache Cassandra 1.2.11,并且还不想升级。不过根据问题 CASSANDRA-5615,在 Cassandra 1.2.6 中, 支持集合上的自定义索引。
问题是,只有documentation 可用状态:
Cassandra 支持创建自定义索引,仅供内部使用,超出本文档的范围。
但是,它确实建议了以下语法:
CREATE CUSTOM INDEX ON songs ( tags ) USING 'class_name';
此 CQL 语句中指定的 class_name 是什么?
有没有更好的方法来索引标签,以便我可以在 songs 表中查询具有特定标签的歌曲列表?
【问题讨论】:
标签: java cassandra cql3 datastax-java-driver