我正在尝试在弹性搜索中创建一个新索引,如下所示
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
}
该字段是否已经过分析和转换?
请告知
答案 0 :(得分:1)
ElasticSearch不允许为日期字段指定分析器,仅用于字符串。如果您在应用设置后尝试curl http://localhost:9200/abtest2/_mapping
,则会看到:
{
"abtest2": {
"mappings": {
"fix": {
"properties": {
"Date": {
"type": "date",
"format": "dateOptionalTime"
}
}
}
}
}
}
分析仪已被移除且未被使用。
在将数据发送到ES之前,您需要清理数据,以便将其作为日期正确解析。