我有一个Solr(版本4.10.3)云,由3个由Zookeeper管理的Solr实例组成。每个核心都从当前的领导者复制到另一个核心,用于减少。
现在问题。我需要将SQL中的日期时间字段索引为通配符查询的TextField(不是最好的解决方案,但是要求不是更少)。在执行导入的核心上,一切看起来都应该如此,并且该字段包含的值如下:2008.10.18 17:16:31.0
但是其他核心上的相应文档(由复制处理程序同步)的值为:Sat Oct 18 17:16:31 CEST 2008
相同的领域。我已经尝试了一段时间,但没有成功。除了这一点之外,核心和云的行为都是预期的。
有没有人知道我做错了什么?
fieldType如下所示:
<fieldType name="stringD" class="solr.TextField" sortMissingLast="true" omitNorms="false">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="([-])" replacement="." replace="all" />
</analyzer>
</fieldType>
这是link to a screenshot显示其所有荣耀中的行为,最重要的部分来自完全导入的核心。
答案 0 :(得分:0)
所以我的第一个答案是我的第一个问题;)
最初设置此核心时,使用了像这样的导入查询。
SELECT * FROM [TABLE]
然后在data-import-handler中将字段映射为这样。
<field column="ENDTIME" name="ENDTIME" />
当Solr开始将SQL中[ENDTIME](datetime2)列的内容转换为日期时,会将其添加到导入查询中。
CAST(CAST(ENDTIME as datetime2(0)) as varchar(100)) as ENDTIMESTR
从SQL强制使用正确的格式:2008-10-18 17:16:31.0
。
数据导入处理程序映射也更改为以下内容:
<field column="ENDTIMESTR" name="ENDTIME" />
正因为如此,[ENDTIME]和[ENDTIMESTR]都来自SQL进入数据导入处理程序,不知何故,Solr只能在启动完全导入的核心上使用正确的field / fieldType。将字段复制到其他核心时,Solr似乎查看了原始的[ENDTIME]列(仅在完整/ delta导入期间存在于data-import-handler中,请记住SELECT * FROM [TABLE]
)。 Solr-schema中的ENDTIME一直是TextField。
解决方案:删除*
,而使用[ENDTIME]显式定义完整/ delta查询中的所有字段,如下所示CAST(CAST(ENDTIME as datetime2(0)) as varchar(100)) as ENDTIME
。
现在一切都符合预期。我想在某个地方的数据导入处理程序映射中存在一个错误,但我的配置也不是最好的。
希望这可以帮助其他人走出滑坡Solr-slope!