我们刚从DataStax Enteprise 3.2.2升级到4.5.1。 我们从3.2.2迁移 - > 3.2.5 - > 4.0.3 - > 4.5.1,每次按照文档中的步骤进行操作,并在每次升级后升级sstables。
服务器正在运行,核心正在接受查询。
现在,尝试摆脱次优设置,我尝试使用新的solrconfig.xml重新加载SolR核心,该失败并出现此错误消息:
当前validation_class并且发现SolrType与列匹配:created_at
经过一些研究,我们认为我们已经使用HTTP API创建了一个遗留(thrift)表,但不知何故也将数据映射类型设置为" 2" (仅适用于CQL3表)。如何在不重新创建一切的情况下解决这个问题?
从" 2"更改数据映射类型时到" 1",并通过API发布配置和架构,我得到了这个:
org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Solr core peantus.oranges有dseTypeMappingVersion = 2,无法加载 使用dseTypeMappingVersion = 1的新Solr配置。
使用dseTypeMappingVersion = 2发布solrconfig.xml的堆栈跟踪如下:
ERROR [http-8983-5] 2014-07-31 15:56:39,091 SolrCoreResourceManager.java(第435行)无法创建核心: peanuts.oranges org.apache.solr.common.SolrException:无法创建 核心:peanuts.oranges 在org.apache.solr.core.CoreContainer.recordAndThrow(CoreContainer.java:957) 在com.datastax.bdp.search.solr.core.CassandraCoreContainer.create(CassandraCoreContainer.java:265) 在com.datastax.bdp.search.solr.core.SolrCoreResourceManager.reloadCore(SolrCoreResourceManager.java:382) 在com.datastax.bdp.search.solr.handler.admin.CassandraCoreAdminHandler.handleReloadAction(CassandraCoreAdminHandler.java:143) 在org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:178) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:137) 在org.apache.solr.servlet.SolrDispatchFilter.handleAdminRequest(SolrDispatchFilter.java:669) 在org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:248) 在org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:197) 在com.datastax.bdp.search.solr.servlet.CassandraDispatchFilter.doFilter(CassandraDispatchFilter.java:99) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在com.datastax.bdp.cassandra.audit.SolrHttpAuditLogFilter.doFilter(SolrHttpAuditLogFilter.java:218) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在com.datastax.bdp.search.solr.auth.CassandraAuthorizationFilter.doFilter(CassandraAuthorizationFilter.java:100) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在com.datastax.bdp.search.solr.auth.DseAuthenticationFilter.doFilter(DseAuthenticationFilter.java:102) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:606) 在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)引起:javax.xml.parsers.ParserConfigurationException:Current validation_class并发现SolrType与列不匹配: created_at。 在com.datastax.bdp.search.solr.core.ThriftCassandraSolrSchemaUpdater.addColumnMetaData(ThriftCassandraSolrSchemaUpdater.java:196) 在com.datastax.bdp.search.solr.core.ThriftCassandraSolrSchemaUpdater.update(ThriftCassandraSolrSchemaUpdater.java:72) 在com.datastax.bdp.search.solr.core.CassandraCoreContainer.create(CassandraCoreContainer.java:244) ... 29更多
下表是使用DSE Search的HTTP API创建的。
cqlsh:peanuts> DESCRIBE TABLE oranges;
CREATE TABLE oranges (
key text,
"_docBoost" text,
category_id int,
category_name text,
city text,
country_code text,
created_at timestamp,
...
solr_query text,
text text,
user_id text,
week_of_year int,
year int,
PRIMARY KEY ((key))
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};
以下是schema.xml的相关摘录:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="created_at" type="date" indexed="true" stored="true" docValues="true" />
...
<field name="postal_code" type="string" stored="true" indexed="true"/>
<field name="country_code" type="string" stored="true" indexed="true"/>
<field name="city" type="string" stored="true" indexed="true"/>
<field name="latitude" type="float" indexed="true" stored="true"/>
<field name="longitude" type="float" indexed="true" stored="true"/>
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
</fields>
....
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
我目前的假设是,我们需要将当前solrconfig更改为类型1的映射,因为这对应于实际的数据存储设置。但是,如果API不接受POST?
或者,我可以考虑迁移到纯CQL3表,但这需要从头开始完全重新生成数据,对吧?这可以避免吗?
答案 0 :(得分:1)
问题是版本2的类型映射,它期望TimestampType,而Thrift使用DateType。
您需要通过在Solr配置中添加以下代码段来“强制”降级到类型1:
<dseTypeMappingVersion force="true">1</dseTypeMappingVersion>
然后上传并重新加载核心。