我正在尝试使用以下映射索引elasticsearch中的文档:
{"thread": {"properties":{"message":{"type": "nested", "properties": {"message_id": {"type":"string"}, "message_text":{"type":"string"}, "message_nick":{"type":"string"}}}}}}
然后使用它在Java中添加映射:
CreateIndexRequestBuilder indexRequest = client.admin().indices().prepareCreate(INDEX).addMapping("message", mapping);
但是我收到以下错误:
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Root type mapping not empty after parsing! Remaining fields: [mappings : {thread={properties={message={properties={message_text={type=string}, message_nick={type=string}, message_id={type=string}}, type=nested}}}}]
有谁能让我知道我是怎么得到这个错误的?
答案 0 :(得分:2)
我不知道您的确切映射的详细信息,但我遇到了类似的问题,并且意识到当您通过java API添加映射时,您需要删除根目录下方的json对象。
例如,我尝试添加的映射是:
{"mappings":{"_default_":{"date_detection":false,"dynamic_templates":[{"dates":{"match":".*Date|date","match_pattern":"regex","mapping":{"type":"date"}}}]}}}
上面使用REST API添加了很多内容,但是使用Java API时出现了与您提到的相同的错误。
我删除了“mappings”json对象并解决了这个问题。有效的最终映射是:
{"_default_":{"date_detection":false,"dynamic_templates":[{"dates":{"match":".*Date|date","match_pattern":"regex","mapping":{"type":"date"}}}]}}