【问题标题】:Getting the result of a SearchResponse in ElasticSearch在 ElasticSearch 中获取 SearchResponse 的结果
【发布时间】:2015-08-02 21:33:34
【问题描述】:

我正在尝试使用 ES 作为我的 MongoDB 的索引。我已经成功地集成了它们,但我发现搜索 API 相当复杂和混乱。 Java API 也没有太大帮助。

我能够找到完全匹配的结果,但我怎样才能得到这个结果?这是我的代码:

Node node = nodeBuilder().node();

SearchResponse sr = node.client().prepareSearch()
        .addAggregation(
            AggregationBuilders.terms("user").field("admin2san")
            .subAggregation(AggregationBuilders.terms("SPT").field("64097"))
        )
        .execute().actionGet();

SearchHit[] results = sr.getHits().getHits();
List<Firewall> myfirewall = results.getSourceAsObjectList(Firewall.class);
for (Firewall info : myfirewall) {
       System.out.println("search result is " + info);
}

【问题讨论】:

  • 您能详细说明一下吗?你想要什么作为最终结果?
  • 我想在 Sytem.out.println 中显示这个查询的结果。

标签: java mongodb elasticsearch


【解决方案1】:

我不太确定我是否理解您的问题。

如果您想根据您的示例打印 searchResponse 的结果,它应该是这样的:

SearchHit[] results = sr.getHits().getHits();
for(SearchHit hit : results){
    String sourceAsString = hit.getSourceAsString();
    if (sourceAsString != null) {
        Gson gson = new GsonBuilder().setDateFormat(dateFormat)
                .create();
        System.out.println( gson.fromJson(sourceAsString, Firewall.class));
    }
}

我正在使用 Gson 将 Json 响应转换为 FireWall(POJO)。

我希望它是你要找的。​​p>

【讨论】:

  • 我添加了一些东西来将您的日期参数格式化为定义的 DateFormat
  • No Resulat :( Samy 你能给我你的地址吗?
  • 如果结果为空,那么您的请求一定没有响应。确保您的数据样本应该有结果。如果 results 不为空且 Gson 无法从 Json 转换为 POJO,请确保 ElasticSearch 中返回的字段与 Object FireWall 中的字段相同。
  • @SamyElaiassi- 如果我在 Firewall 类中有任何可用的 List 变量怎么办?
【解决方案2】:

response.getHits().getHits()[0].getSourceAsMap() 你可以试试这样的

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多