java - ElasticSearch 5.0 Java获取特定字段

标签 java elasticsearch

在 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/

相关文章:

javascript - 有没有办法从一个别名下的所有索引中获得一个统一的映射?

elasticsearch - Elasticsearch查询以查找术语数量等于指定数量的文档

Java WebStart - 第 3 方 jar - list

javascript - 我的调用 Spring Controller 失败

java - Observable 作为函数 - 观察者设计模式 java

elasticsearch - 无法为同一索引 elasticsearch 和 Kibana 创建两种类型

elasticsearch - 使用独立的 Elasticsearch 运行 netflix 指挥?

Java Swing - JLabel 中出现空格

java - 一起使用 JUnit 和 TestNG

elasticsearch - Search Guard Kibana clientcert 身份验证