我面临着Elasticsearch的一个怪异问题。我的映射指定某个字段的类型为long。现在我不小心试图索引一些具有string该字段类型而不是的文档long。我没有从Elasticsearch得到任何错误,但从未对文档建立索引。当我解决此问题时,文件被索引就好了。
long
string
例:
我的映射:
{ "field1": { "type": "long" } }
当我发送此文档时,它会静默失败:
{ "field1": "this is a string" }
当我发送此消息时,它按预期工作:
{ "field1": 12345 }
有没有办法检测这种错误?
如果将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 }