Elasticsearch Java API Создать индекс с отображением не удается - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать новые индексы в Elasticsearch 7, используя Java API. Я могу создать новый индекс просто отлично, ожидаю, когда я пытаюсь либо создать его с помощью сопоставления, либо попытаться добавить сопоставление после факта в документах:

добавить сопоставление

создание индекса с отображением

это прекрасно работает, когда я просто создаю индекс

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, или просто пишу экранированный пример строки, или нет, объект запроса выполняет преобразование, в котором он нуждается, внутренне (я думаю), а затем вastic возникает проблема с форматом, который он создал?

Я должен упомянуть, что все это в контексте Spring Maven, и создание / вставка индексов / документов выполняется из единственного компонента. Хотя я не могу найти никаких признаков того, что здесь виновник? Он отлично работает, когда я просто создаю индекс без привязанного отображения.

Любая помощь, как всегда, ценится.

1 Ответ

0 голосов
/ 20 июня 2019

Извиняюсь за ответ на свой вопрос, но в случае, если кто-то столкнется с этим: все вышеперечисленное в порядке, именно способ, которым мой RestHighLevelClient возвращался из Spring bean, был проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...