SolrCloud SQL强制转换异常

时间:2017-09-14 10:34:26

标签: solr solrcloud

我有一个包含多个不同类型字段的集合,当我运行SQL查询时,只能使用字符串类型字段。如果我尝试选择 int / long / float / double 字段,我会得到一个与此类似的异常。

"result-set":{
    "docs":[{
        "EXCEPTION":"java.lang.Long cannot be cast to java.lang.String",
        "EOF":true,
        "RESPONSE_TIME":276}]}}

有什么方法可以解决这个问题吗?

我正在使用 Solr 6.6 。字段类型定义如下。

<fieldType name="StrField" class="org.apache.solr.schema.StrField"/>
<fieldType name="TextField" class="org.apache.solr.schema.TextField">
<fieldType name="TrieDoubleField" class="org.apache.solr.schema.TrieDoubleField"/>
  <fieldType name="TrieFloatField" class="org.apache.solr.schema.TrieFloatField"/>
  <fieldType name="TrieIntField" class="org.apache.solr.schema.TrieIntField"/>
  <fieldType name="TrieLongField" class="solr.TrieLongField" positionIncrementGap="0" docValues="true" precisionStep="0"/>

所有带有列表的SQL查询都可以使用StrField和TextField。

我已尝试使用 Solrj 驱动程序,并为上面定义的所有数字类型提供相同的运气。字符串/文本工作正常。

Exception in thread "main" java.sql.SQLException: java.sql.SQLException: java.io.IOException: --> http://xx.xx.xx.xx:7574/solr/collection_test_shard2_replica2/:java.lang.Long cannot be cast to java.lang.String
    at org.apache.solr.client.solrj.io.sql.StatementImpl.executeQueryImpl(StatementImpl.java:74)
    at org.apache.solr.client.solrj.io.sql.StatementImpl.executeQuery(StatementImpl.java:111)
    at tng.Sql.run(Sql.java:40)
    at tng.MainSolrCloud.main(MainSolrCloud.java:52)
Caused by: java.sql.SQLException: java.io.IOException: --> http://xx.xx.xx.xx:7574/solr/collection_test_shard2_replica2/:java.lang.Long cannot be cast to java.lang.String
    at org.apache.solr.client.solrj.io.sql.ResultSetImpl.<init>(ResultSetImpl.java:83)
    at org.apache.solr.client.solrj.io.sql.StatementImpl.executeQueryImpl(StatementImpl.java:71)
    ... 3 more
Caused by: java.io.IOException: --> http://x.xx.x.xx:7574/solr/collection_test_shard2_replica2/:java.lang.Long cannot be cast to java.lang.String
    at org.apache.solr.client.solrj.io.stream.SolrStream.read(SolrStream.java:233)
    at org.apache.solr.client.solrj.io.stream.PushBackStream.read(PushBackStream.java:87)
    at org.apache.solr.client.solrj.io.sql.ResultSetImpl.<init>(ResultSetImpl.java:80)
    ... 4 more

0 个答案:

没有答案