В ElasticSearch 2.X, когда я хотел запросить конкретных полей из определенного типа в API Java, я мог бы сделать что-то вроде этого:ElasticSearch 5.0 Java получить определенные поля
public List<String> getNames(String index, String type) {
List<String> names = new ArrayList<>();
SearchResponse scrollResp = client.prepareSearch()
.setIndices(index)
.setTypes(type)
.addFields("my_name")
.setQuery(QueryBuilders.matchAllQuery())
.setSize(10).execute().actionGet();
for (SearchHit hit : scrollResp.getHits().getHits()) {
Map<String, SearchHitField> fields = hit.getFields();
String name = fields.get("my_name").value();
names.add(name);
}
return names;
}
Однако в ES 5.0 , метод «addFields» исчез. Существует нечто, называемое «addStoredField». Однако это, похоже, не работает, если вы явно не помечены ваши поля в сопоставлении как хранятся. Скорее «hit.getFields()» для приведенного выше кода просто возвращает пустой набор полей (fields.size() == 0).
Как достичь такой же функциональности для 5.X, как и для 2.X? То есть, получить конкретные поля из результатов, без явного хранения их ..?
Я использую PreBuiltTransportClient в качестве клиента здесь.