Создание сопоставления запроса индекса не работает в эластичном поиске

Я пытаюсь создать тип данных Join в индексе эластичного поиска, он работает с консоли kibana / через rest, но когда я пытаюсь создать сопоставление для индекса программно, он не работает с ошибкой ниже,

java.util.concurrent.ExecutionException: RemoteTransportException[[3cfb4e163654][172.17.0.2:9300][indices:admin/create]]; nested: MapperParsingException[Failed to parse mapping [properties]: Root mapping definition has unsupported parameters:  [my_join_field : {type=join, relations={question=answer}}] [my_id : {type=keyword}]]; nested: MapperParsingException[Root mapping definition has unsupported parameters:  [my_join_field : {type=join, relations={question=answer}}] [my_id : {type=keyword}]];

Отображение:

{
    "properties": {
      "my_id": {
        "type": "keyword"
      },
      "my_join_field": { 
        "type": "join",
        "relations": {
          "question": "answer" 
        }
      }
    }
  }

Код:

public void createIndex(ReIndex indexObject) throws XXXDefinedException {
        String index = indexObject.getDestinationIndex();
        try {
            LOG.info("Initiating the index creation process for the " + index);
            CreateIndexRequest request = new CreateIndexRequest(index);
            if (!CommonUtils.isEmptyMap(indexObject.getMapping())) {
                LOG.info("Index Mapping Available : " + index);
                String indexMapping = new GsonBuilder().create().toJson(indexObject.getMapping());
                request.source(indexMapping, XContentType.JSON);
            }
            AcknowledgedResponse indexResponse = client.admin().indices().create(request).get();
            client.admin().indices().prepareRefresh().execute().actionGet();
            LOG.info("Index is created successfully : " + indexResponse);
        } catch (Exception e) {
            throw new XXXDefinedException (e);
        }
    }

где inputObject.getMapping () имеет следующее отображение:

  {"mappings":{"properties":{"my_id":{"type":"keyword"},"my_join_field":{"type":"join","relations":{"question":"answer"}}}}}

person Harry    schedule 19.06.2020    source источник
comment
Можете ли вы также добавить операторы импорта? похоже проблема с indexObject?   -  person Gibbs    schedule 21.06.2020


Ответы (1)


Ваш inputObject.getMapping() не должен иметь mapping часть. Не могли бы вы внести изменения в inputObject.getMapping(), который у вас есть:

{"mappings":{"properties":{"my_id":{"type":"keyword"},"my_join_field":{"type":"join","relations":{"question":"answer"}}}}}

to

{"properties":{"my_id":{"type":"keyword"},"my_join_field":{"type":"join","relations":{"question":"answer"}}}}

Сообщите мне, если это сработает.

person Opster ES Ninja - Kamal    schedule 22.06.2020
comment
Да, но эластичный поиск внутри хранится как сопоставление - ›сопоставление -› свойства, проверьте эту ссылку: поэтому я использую request.source с {mappings: {mappings: {properties: {my_id: {type: keyword}, ​​my_join_field: {type: присоединиться, отношения: {вопрос: ответ}}}}}} и это сработало - person Harry; 22.06.2020
comment
для справки проверьте эту ссылку: techoverflow.net/2019/04/17/ - person Harry; 22.06.2020
comment
Извините, я использовал метод request.mapping(jsonString,XContentType.JSON);, а не тот, который вы использовали, т.е. request.source(jsonString, XContenType.JSON);. Я считаю, что оба должны быть достаточно правильными и в конечном итоге будут преобразованы в правильный формат JSON, необходимый для elasticsearch. Если вы прочитаете исходный код для CreateRequestIndex, вы сможете увидеть, как используются оба метода. - person Opster ES Ninja - Kamal; 22.06.2020
comment
Странно. Я пробовал использовать исходный метод с имеющейся у вас строкой сопоставления, но проблема все еще возникает. Не могли бы вы обновить детали maven, просто хотите проверить, какую версию ES вы используете. Я пробовал с 7.7, и оба раза работает только JSON, который я упомянул в ответе, но не то, что вы упомянули в комментарии. - person Opster ES Ninja - Kamal; 22.06.2020
comment
Не могли бы вы помочь мне в этом, пожалуйста: stackoverflow.com/questions/62671455/ elasticsearch-put-role-api - person Harry; 02.07.2020
comment
@ Гарри, пожалуйста, дай мне немного времени. Я обновлю свои выводы, как только смогу. - person Opster ES Ninja - Kamal; 02.07.2020