弹性搜索IndexCreationException

时间:2015-09-02 16:59:51

标签: java regex elasticsearch

我正在尝试在弹性搜索中创建一个新索引,如下所示

  PUT /abtest2
    {
      "settings":{

       "analysis":{

         "char_filter":{

           "replaceJunk":{

             "type":"pattern_replace",
             "pattern":"[^\\d+]",
             "replacement":""
           }
         },

          "analyzer":{

     "dateAnalyzer":{

     "type":"custom",
     "tokenizer":"standard",
     "char_filter":["replaceJunk"]
     }
    }

   }
  },

      "mappings":{

            "fix":{

                "properties": {

                   "Date": {
                      "type": "date",
                      "analyzer": "dateAnalyzer"
                   }
                }
             }
        }
    }

所以基本上,我想为我的Date字段创建一个自定义分析器,可能有一些非数字字符。现在,我尝试传递一个像

这样的值
PUT /abtest2/fix/5
{
     "Date":"14186196000-0005"
}

但这给了我一个错误

    {
   "error": "MapperParsingException[failed to parse [Date]]; nested: MapperParsingException[failed to parse date field [14186196000-0005], tried both date format [dateOptionalTime], and timestamp number with locale []]; nested: IllegalArgumentException[Invalid format: \"14186196000-0005\" is malformed at \"00-0005\"]; ",
   "status": 400
}

该字段是否已经过分析和转换?

请告知

1 个答案:

答案 0 :(得分:1)

ElasticSearch不允许为日期字段指定分析器,仅用于字符串。如果您在应用设置后尝试curl http://localhost:9200/abtest2/_mapping,则会看到:

{
   "abtest2": {
      "mappings": {
         "fix": {
            "properties": {
               "Date": {
                  "type": "date",
                  "format": "dateOptionalTime"
               }
            }
         }
      }
   }
}

分析仪已被移除且未被使用。

在将数据发送到ES之前,您需要清理数据,以便将其作为日期正确解析。