【问题标题】:Multivalued copy field support in DSE SOLRDSE SOLR 中的多值复制字段支持
【发布时间】:2014-05-01 03:22:40
【问题描述】:

我有如下 SOLR 架构:

<field name="category_id1" type="integer" indexed="false" stored="true" />
<field name="category_id2" type="integer" indexed="false" stored="true" />
<field name="category_id3" type="integer" indexed="false" stored="true" />
<field name="category_ids" type="integer" multiValued="true" indexed="true" stored="true"/>

和一个复制部分:

<copyField source="category_id1" dest="category_ids" />

但每当我尝试将数据注入 DSE/Cassandra 时,都会出现此错误

InvalidRequestException(why:(Expected 4 or 0 byte int (14)) [diem][business][category_ids] failed validation) me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:(Expected 4 or 0 byte int (14)) [diem][business][category_ids] failed validation) Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:(Expected 4 or 0 byte int (14)) [diem][business][category_ids] failed validation) at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:45) at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:264) at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97) at me.prettyprint.cassandra.model.MutatorImpl.execute(MutatorImpl.java:243) at com.diem.db.crud.CassandraStorageManager.insertMultiColumns(CassandraStorageManager.java:197) at com.diem.db.dao.impl.AbstractDaoImpl.saveUUIDEntity(AbstractDaoImpl.java:47) at com.diem.db.dao.impl.BusinessDaoImpl.saveBusiness(BusinessDaoImpl.java:81) at com.diem.data.LoadBusinesses.execute(LoadBusinesses.java:187) at com.diem.data.LoadContent.run(LoadContent.java:121) at com.diem.data.LoadBusinesses.main(LoadBusinesses.java:45) Caused by: InvalidRequestException(why:(Expected 4 or 0 byte int (14)) [diem][business][category_ids] failed validation) at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:20833) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:964) at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:950) at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:246) at me.prettyprint.cassandra.model.MutatorImpl$3.execute(MutatorImpl.java:243) at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103) at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258) ... 8 more

复制到多值 solr.IntField(整数)并不是什么特别的事情,我们可以在使用 DSE/SOLR 之前完成它。但我似乎无法在 DSE/SOLR 组合中完成这项工作。从逻辑上讲,我看不出失败的任何原因,因为 DSE 不应干扰对主要用于索引的 category_ids 字段的操作。有没有人看到这种情况有什么问题?在这种情况下我可以做些什么来防止验证错误(注意:我不能为category_ids 使用文本/字符串类型)?

谢谢!

【问题讨论】:

    标签: solr cassandra datastax-enterprise datastax


    【解决方案1】:

    我可以找出问题所在,我的 CF 有一个 default_validation_class=BytesType,所以 multiValued 字段 category_ids 在 DSE/Solr 中使用 BytesType 进行验证,这将导致错误。因此,除非我使用 LIST&lt;int&gt; 的类型将我的 CF 更改为 CQL 声明并且不使用 Hector(至少对于这个 CF),否则我将无法使用 Solr 中的文本/字符串字段以外的多值字段。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您使用的是 thrift 表,因此您可以将 category_ids column 声明为 UTF8Type(Solr 字段可以是任何类型),或者将 category_ids Solr 字段声明为stored=false(在这种情况下,复制字段不会被存储,只会被索引)。

      让我们知道这两种方法是否适合您。

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多