Solr не принимает поле даты "гггг-ММ-дд" с полем tdate (TrieDateField) - PullRequest
0 голосов
/ 10 января 2020

Я использую Solr 7.7.2 версию. Я определил поле с именем date_test с типом tdate(TrieDateField), как указано ниже, внутри {core}/conf/schema.xml файла

 <field name="date_test" type="tdate" docValues="true" indexed="true" stored="true" required="false" multiValued="true" />

Внутри {core}/conf/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,SSSZ</str>
      <str>yyyy-MM-dd'T'HH:mm:ss.SSS</str>
      <str>yyyy-MM-dd'T'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>
    </arr>
  </updateProcessor>

Кроме того, я вижу, что этот бин используется внутри updateRequestProcessorChain, как указано ниже,

<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
           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>

Теперь, когда я пытаюсь опубликовать документ с использованием curl в формате yyyy-MM-dd, как показано ниже ,

 curl -X POST -d '{"add":{ "doc":{"id":"delete.me1","messageid":"message.delete.me1","date_test":"2020-01-10"}}}' -H "Content-Type: application/json" http://{ip}:8983/solr/test-data/update?commit=true

Это дает мне ошибку вроде

{
  "responseHeader":{
    "status":400,
    "QTime":4},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"ERROR: [doc=message.delete.me1] Error adding field 'date_test'='2020-01-10' msg=Invalid Date String:'2020-01-10'",
    "code":400}}

Я пытаюсь понять, почему этот формат не принят, даже если у нас есть формат, определенный внутри ParseDateFieldUpdateProcessorFactory

Может кто-нибудь помочь? Заранее спасибо.

1 Ответ

1 голос
/ 10 января 2020

Кажется, ваша цепочка процессоров не включена: default="${update.autoCreateFields:false}".

Возможно, вам придется проверить, установлено ли update.autoCreateFields в вашей конфигурации, потому что оно на самом деле откат до false. Вам необходимо установить значение true:

bin/solr config -c <collection> -p <port> -action set-user-property -property update.autoCreateFields -value true
...