gpt4 book ai didi

java - ElasticSearch 5.0 Java获取特定字段

转载 作者:行者123 更新时间:2023-11-30 02:43:39 27 4
gpt4 key购买 nike

在 ElasticSearch 2.X 中,当我想从 Java API 中的特定类型查询特定字段时,我可以执行以下操作:

  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 作为客户端。

最佳答案

如果您使用 .setFetchSource 方法来定义您正在使用的字段,该怎么办:

SearchResponse scrollResp = client.prepareSearch()
.setIndices(index)
.setTypes(type)
.setSearchType(SearchType.QUERY_AND_FETCH)
.setFetchSource(new String[]{"my_name"}, null) <--- your specific field
.setQuery(QueryBuilders.matchAllQuery())
.setSize(10).execute().actionGet();

你可以看看这个SO以及。

关于java - ElasticSearch 5.0 Java获取特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com