Solr - "Error adding field … msg=Invalid Date String" 向核心发送 json 数据时

Solr - "Error adding field … msg=Invalid Date String" when sending json data to core

我是 Solr 的新手。
我正在尝试将日志文件传递给 Solr。为此,我使用日志文件 -> Filebeat -> Logstash -> Solr。



问题

Logstash 输出正常,但 Solr 仍然为空。
因为 Logstash 输出文本是“2020-01-01 00:00:00.000”,所以我尝试过使用 cURL 来执行 Solr 更新,比如下面的命令。

第一个命令:(字段“my_datetime”的尾部是 Z)

curl -X POST -d '{"add":{ "doc":{"my_datetime":"2020-01-01T00:00:00.000Z"}}}' -H "Content-Type: application/json" http://localhost:8983/solr/Collection/update?commit=true

第二个命令:(字段“my_datetime”的尾部不是 Z)

curl -X POST -d '{"add":{ "doc":{"my_datetime":"2020-01-01 00:00:00.000"}}}' -H "Content-Type: application/json" http://localhost:8983/solr/Collection/update?commit=true

问题

第一个命令有效。 但是第二个命令不起作用,我收到了一个异常:

    {
  "responseHeader":{
    "status":400,
    "QTime":13},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"ERROR: [doc=60146d1c-ed31-4dda-b90e-e93537b8a63a] Error adding field 'my_datetime'='2020-01-01 00:00:00.000' msg=Invalid Date String:'2020-01-01 00:00:00.000'",
    "code":400}}

环境

这是我的托管模式

<fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>

<field name="my_datetime" type="pdate" indexed="true" stored="true"/>

这是我的solrconfig.xml

<updateProcessor class="solr.ParseDateFieldUpdateProcessorFactory" name="parse-date">
    <arr name="format">
        <str>yyyy-MM-dd'T'HH:mm:ss.SSSZ</str>
        <str>yyyy-MM-dd'T'HH:mm:ss,SSS[Z</str>
        <str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>
        <str>yyyy-MM-dd' 'HH:mm:ss.SSS</str>
        <str>yyyy-MM-dd'T'HH:mm:ssZ</str>
        <str>yyyy-MM-dd'T'HH:mm:ss</str>
        <str>yyyy-MM-dd'T'HH:mmZ</str>
        <str>yyyy-MM-dd'T'HH:mm</str>
        <str>yyyy-MM-dd HH:mm:ss.SSSZ</str>
        <str>yyyy-MM-dd HH:mm:ss,SSSZ</str>
        <str>yyyy-MM-dd HH:mm:ss.SSS</str>
        <str>yyyy-MM-dd HH:mm:ss,SSS</str>
        <str>yyyy-MM-dd HH:mm:ssZ</str>
        <str>yyyy-MM-dd HH:mm:ss</str>
        <str>yyyy-MM-dd HH:mmZ</str>
        <str>yyyy-MM-dd HH:mm</str>
        <str>yyyy-MM-dd</str>
        <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]]</str>
        <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
        <str>yyyy-MM-dd['T'[HH:mm[:ss[.SSS]][z</str>
        <str>yyyy-MM-dd['T'[HH:mm[:ss[,SSS]][z</str>
        <str>yyyy-MM-dd HH:mm[:ss[.SSS]][z</str>
        <str>yyyy-MM-dd HH:mm[:ss[.SSS]]</str>
        <str>yyyy-MM-dd HH:mm[:ss[,SSS]][z</str>
        <str>[EEE, ]dd MMM yyyy HH:mm[:ss] z</str>
        <str>EEEE, dd-MMM-yy HH:mm:ss z</str>
      <str>EEE MMM ppd HH:mm:ss [z ]yyyy</str>
    </arr>
  </updateProcessor>


<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
           processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>

感谢您的帮助!

您应该以正确的格式传递日期值。

当日期时间字符串的格式无效时,SOLR 将抛出该错误。 SOLR 只允许 YYYY-MM-DDThh:mm:ssZ.

格式的日期时间字符串

正确的格式是2020-10-01T00:00:00Z。它也适用于您分享的示例。

在您的 logstash 文件中添加适当的过滤器以改变上述预期格式的日期。