solr - 将日期类型 (solr.TrieDateField) 复制到字符串类型 (solr.TextField) 时,Solr CopyField 行为奇怪
问题描述
我正在使用以下方法将日期字段复制到字符串字段(schema.xml):
<copyField source="mydate" dest="mystr"/>
source 和 dest 类型定义为:
<field name="mydate" type="solr.TrieDateField" indexed="true" stored="true"/>
<field name="mystr" type="solr.TextField" indexed="true" stored="true" multiValued="true"/>
mydate 的值为“2009-06-03T00:00:00Z”
我期望 mystr 中的值相同,即“2009-06-03T00:00:00Z”,但我在 mystr 中获得了不同格式的日期。我在 mystr 中得到的值是“Wed Jun 03 00:00:00 UTC 2009”。
我在 solrcloud 模式下运行 solr 并且有 2 个节点 solr 集群。此外,此行为仅在 solrcloud 模式下发生。如果我将 solr 作为单个节点运行,这将完美运行。
我正在寻求帮助以将源日期原样(不更改格式)放入 mystr 字段。
我知道我可以通过在 DIH 中定义一个单独的字符串字段并设置值来实现这一点,但我很想知道为什么上面的副本不能按预期工作。
解决方案
这里的核心问题是日期字段在 copyField 发生时已经被解析。因此,您将内部日期表示扩展回副本的文本。
禁用“无模式模式”的经典模式不应该发生这种情况。也许这就是为什么它不会在独立版本中发生。对于 SolrCloud,很可能在对象被发送到不同节点之前已经解析到现有字段。然后,各个节点实际执行 copyField 指令。无论如何,这是我的假设,我没有仔细研究来源。
解决方案是使用UpdateRequestProcessor(例如 CloneFieldUpdateProcessorFactory),因为它肯定会准确复制您发送的内容。如果需要,它可以与 DIH 结合使用。请注意阅读与您的 Solr 版本匹配的手动版本,因为有多种调用 URP 的方法,具体取决于您正在运行的内容。
您可能还会发现我所做的基于该前提的 Solr 谜题很有趣(好吧,您已经知道部分答案了)。
推荐阅读
- twilio - 即使使用了 Twilio 的转向服务器,WebRTC 也无法工作
- r - 如何限制用户在 R 中写入的数据?
- python - 为什么 Spyder 不承认虚拟环境?
- javascript - setValue 在所有输入上复制值而不是焦点上的输入
- jquery - jQuery 在时间戳后单击来自 nav-pills 的下一个锚标记
- angular - Angular 在按键上发出请求
- javascript - 如何在javascript中应用css?
- angular - stats.js 错误 500,使用 AngularGoogleMaps 样式输入时
- java - RESTAssured - response.getBody().getList(
) 正在返回一个空集合 - node.js - 在不使用 Express Nodejs 的情况下访问请求正文