一尘不染

如果文档的字段映射不匹配,Elasticsearch静默失败

elasticsearch

我面临着Elasticsearch的一个怪异问题。我的映射指定某个字段的类型为long。现在我不小心试图索引一些具有string该字段类型而不是的文档long。我没有从Elasticsearch得到任何错误,但从未对文档建立索引。当我解决此问题时,文件被索引就好了。

例:

我的映射:

{
    "field1": {
        "type": "long"
    }
}

当我发送此文档时,它会静默失败:

 {
     "field1": "this is a string"
 }

当我发送此消息时,它按预期工作:

 {
     "field1": 12345
 }

有没有办法检测这种错误?


阅读 401

收藏
2020-06-22

共1个答案

一尘不染

如果将ignore_malformed 字符串设置为false。如果文档格式不正确,但会引发异常,则不会索引该文档。至少在elasticsearch 1.6.0中。

例:

put test

put test/test/_mapping 
{
    "properties" : {
        "title" : {"type" : "string"},
        "data" : {"type": "long" ,"ignore_malformed":false}

    }
}

put test/test/1
{
    "data" : "1",
    "title" : "valid coerce string to number"
}

put test/test/2
{
    "data" : "hello",
    "title" : "invalid number"
}

#Failed Response
{
   "error": "MapperParsingException[failed to parse [data]]; nested: NumberFormatException[For input string: \"hello\"]; ",
   "status": 400
}

Query with Get fails

get test/test/2


{
   "_index": "test",
   "_type": "test",
   "_id": "2",
   "found": false
}
2020-06-22