我正在使用Datastax解决方案(DSE)。
这是Cassandra模型:
CREATE TABLE mykeyspace.mytable (
uid uuid,
date_tsp timestamp,
solr_query text,
text_txt text,
PRIMARY KEY (uid, date_tsp)
)
我的solr schema.xml:
<schema name="mytable" version="1.5">
<types>
<fieldType name="uuid" class="solr.UUIDField"/>
<fieldType name="text" class="solr.TextField"/>
<fieldType name="date" class="solr.TrieDateField"/>
</types>
<fields>
<field name="uid" type="uuid" indexed="true" stored="true" docValues="true"/>
<field name="date_tsp" type="date" indexed="true" stored="true" docValues="true"/>
<field name="text_txt" type="text" indexed="true" stored="true"/>
</fields>
<defaultSearchField>text_txt</defaultSearchField>
<uniqueKey>(uid, date_tsp)</uniqueKey>
</schema>
数据:
insert into mytable (uid, date_tsp, text_txt)
values (75803436-289c-4131-a766-6ba4b7151983, dateof(now()), 'text 1');
insert into mytable (uid, date_tsp, text_txt)
values (75803436-289c-4131-a766-6ba4b7151983, dateof(now()), 'text 2');
insert into mytable (uid, date_tsp, text_txt)
values (75803436-289c-4131-a766-6ba4b7151983, dateof(now()), 'text 3');
insert into mytable (uid, date_tsp, text_txt)
values (uuid(), dateof(now()), 'text 11');
使用Cassandra查询(从Datastax DevCenter运行):
SELECT * FROM text_heard WHERE solr_query='*1*';
SELECT uid, date_tsp, text_txt FROM text_heard
WHERE uid = 75803436-289c-4131-a766-6ba4b7151983;
SELECT date_tsp, text_txt FROM text_heard
WHERE uid = 75803436-289c-4131-a766-6ba4b7151983
AND solr_query = 'text_txt:*1*';
但查询(在SELECT子句中使用 uid ):
SELECT uid, date_tsp, text_txt FROM text_heard
WHERE uid = 75803436-289c-4131-a766-6ba4b7151983
AND solr_query = 'text_txt:*1*';
产生错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.UUID
at org.apache.cassandra.serializers.UUIDSerializer.serialize(UUIDSerializer.java:26) ~[cassandra-all-2.1.8.621.jar:2.1.8.621]
at org.apache.cassandra.db.marshal.AbstractType.decompose(AbstractType.java:73) ~[cassandra-all-2.1.8.621.jar:2.1.8.621]
at com.datastax.bdp.search.solr.cql.SinglePassRowResponseHandler.buildCassandraRows(SinglePassRowResponseHandler.java:140) ~[dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.search.solr.cql.SinglePassRowResponseHandler.handle(SinglePassRowResponseHandler.java:49) ~[dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.search.solr.cql.CqlSolrQueryExecutor.handleSolrResponse(CqlSolrQueryExecutor.java:370) [dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.search.solr.cql.CqlSolrQueryExecutor.execute(CqlSolrQueryExecutor.java:134) [dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.cassandra.cql3.SolrOperationFactory$SolrStatementExecution.execute(SolrOperationFactory.java:71) [dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler$Operation.executeWithTiming(DseQueryHandler.java:223) [dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler$Operation.executeWithAuditLogging(DseQueryHandler.java:259) [dse-4.7.2.jar:4.7.2]
at com.datastax.bdp.cassandra.cql3.DseQueryHandler.process(DseQueryHandler.java:94) [dse-4.7.2.jar:4.7.2]
at org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:119) [cassandra-all-2.1.8.621.jar:2.1.8.621]
at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:439) [cassandra-all-2.1.8.621.jar:2.1.8.621]
at org.apache.cassandra.transport.Message$Dispatcher.channelRead0(Message.java:335) [cassandra-all-2.1.8.621.jar:2.1.8.621]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.access$700(AbstractChannelHandlerContext.java:32) [netty-all-4.0.23.Final.jar:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext$8.run(AbstractChannelHandlerContext.java:324) [netty-all-4.0.23.Final.jar:4.0.23.Final]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_71]
at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:164) [cassandra-all-2.1.8.621.jar:2.1.8.621]
at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:105) [cassandra-all-2.1.8.621.jar:2.1.8.621]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
这是我的设置还是错误?
答案 0 :(得分:1)
读取UUID类型存在一个已知问题,已在以下DSE版本中修复:4.7.4,4.8.0
单次传递查询不适用于UUID,TimeUUID,Inet,Decimal和Varint类型。 (DSP-6443)
请参阅以下DSE4.8 release notes