Elasticsearch Java API使用映射创建索引失败

时间:2019-06-18 15:30:26

标签: java elasticsearch elasticsearch-java-api elasticsearch-mapping

我正在尝试利用java api在Elasticsearch 7中创建新索引。我能够很好地创建一个新索引,希望当我尝试通过映射创建索引,或者尝试根据文档事实在事实之后添加映射:

add mapping

create index with mapping

当我简单地创建一个索引时,这很好用

public boolean createIndex(RestHighLevelClient client, String indexName) throws IOException {
    CreateIndexRequest request = new CreateIndexRequest(indexName);

    //no options just straight forward
    CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    return response.isAcknowledged();
}

但是,添加request.mapping(此示例来自网页)会破坏它吗?

request.mapping(
        "{\n" +
        "  \"properties\": {\n" +
        "    \"firstName\": {\n" +
        "      \"type\": \"text\"\n" +
        "    }\n" +
        "  }\n" +
        "}", 
        XContentType.JSON);

即使我尝试在putMapping也将其破坏后也将其应用于映射

public boolean createMappingOnIndex(RestHighLevelClient client, String indexName, String mapping) throws IOException {
    PutMappingRequest request = new PutMappingRequest(indexName);

    //instead of using my own, using the example from docs to simplify, still not working
    request.source(
       "{\n" +
       "  \"properties\": {\n" +
       "    \"firstName\": {\n" +
       "      \"type\": \"text\"\n" +
       "    }\n" +
       "  }\n" +
       "}", 
     XContentType.JSON);

    AcknowledgedResponse response = client.indices(). putMapping(request, RequestOptions.DEFAULT);
    return response.isAcknowledged();
}

我遇到的错误

java.lang.IllegalStateException: Failed to close the XContentBuilder
     at org.elasticsearch.common.xcontent.XContentBuilder.close
caused by: java.io.IOException: Unclosed Object or array found
     at org.elasticsearch.common.xcontent.json.JsonXContentGenerator.close(JsonXContentGenerator.java ###)

我尝试使用Hashmap实现而不是字符串版本,尽管一旦它进入es字节,似乎是同一回事。这很奇怪,因为无论我使用的是Gson之类的东西,还是只写一个转义的字符串示例,请求对象都会在内部进行所需的转换(我认为),然后elastic会遇到其创建的格式问题?

我应该提到,这全都在Spring Maven上下文中进行,而索引/文档的创建/插入是通过单例bean完成的。虽然我找不到任何迹象表明这是罪魁祸首?当我只创建没有附加映射的索引时,它会很好地工作。

任何帮助一如既往。

1 个答案:

答案 0 :(得分:0)

很抱歉回答我自己的问题,但万一遇到其他情况:上面的所有方法都很好,这是问题的一部分,我的RestHighLevelClient是从Spring bean返回的。