Я следую этой документации по эластичному поиску, чтобы создать сопоставление для моего индекса эластичного поиска с именем «контакты».
Выполнение моего кода приводит к
сбой при создании сопоставления: Ошибка проверки: 1: тип сопоставления отсутствует;
Вот мой код.
public void createElasticMapping() throws IOException {
RestHighLevelClient client = createHighLevelRestClient();
PutMappingRequest request = new PutMappingRequest("contacts");
ArrayList<Field> fields = new ArrayList<Field>();
fields.add(new Field("list_id", "integer"));
fields.add(new Field("contact_id", "integer"));
Map<String, Object> properties = new HashMap<>();
for (Field fieldToAdd : fields) {
Map<String, Object> fieldData = new HashMap<>();
fieldData.put("type", fieldToAdd.type);
properties.put(fieldToAdd.name, fieldData);
}
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("properties", properties);
request.source(jsonMap);
@SuppressWarnings("deprecation")
org.elasticsearch.action.support.master.AcknowledgedResponse putMappingResponse = client.indices()
.putMapping(request, RequestOptions.DEFAULT);
System.out.print(putMappingResponse);
client.close();
}
Это странно, потому что я следую примеру документации. Я использую версию 7.6.0 клиента Java.
Обновлять. Я перешел на версию 7.5.2 клиента Java, потому что это версия моего развертывания Elastic Search. Команда put mapping теперь работает. Однако я не могу заставить работать асинхронный вызов. Если я раскомментирую этот вызов, Eclipse сообщит мне, что эта функция устарела и я должен использовать новую. Однако новый метод выглядит идентично устаревшему (те же параметры, то же имя). Какая разница? И как мне сказать Eclipse использовать новую версию?
Устарело. Этот метод использует старый объект запроса, который все еще относится к типам, что является устаревшей функцией. Вместо этого следует использовать метод putMappingAsync (PutMappingRequest, RequestOptions, ActionListener), который принимает новый объект запроса.
Только синхронный.
@POST
@Path("/mapping")
public void createElasticMapping() throws IOException {
RestHighLevelClient client = createHighLevelRestClient();
PutMappingRequest request = new PutMappingRequest("contacts");
ArrayList<Field> fields = new ArrayList<Field>();
fields.add(new Field("list_id", "integer"));
fields.add(new Field("contact_id", "integer"));
Map<String, Object> properties = new HashMap<>();
for (Field fieldToAdd : fields) {
Map<String, Object> fieldData = new HashMap<>();
fieldData.put("type", fieldToAdd.type);
properties.put(fieldToAdd.name, fieldData);
}
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("properties", properties);
request.source(jsonMap);
org.elasticsearch.action.support.master.AcknowledgedResponse putMappingResponse = client.indices()
.putMapping(request, RequestOptions.DEFAULT);
System.out.print(putMappingResponse);
// вот асинхронный вызов, который не работает. // client.indices (). putMappingAsync (запрос, RequestOptions.DEFAULT, listener);
client.close();
}