Elasticsearch Java:解析后根类型映射不为空

时间:2015-03-27 15:28:06

标签: java elasticsearch mapping

我正在尝试使用以下映射索引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}}}}]

有谁能让我知道我是怎么得到这个错误的?

1 个答案:

答案 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"}}}]}}