gpt4 book ai didi

java - (JAVA、Elasticsearch)如何从 SearchResponse 获取字段?

转载 作者:行者123 更新时间:2023-11-30 05:54:34 28 4
gpt4 key购买 nike

我只是想知道如何从 SearchResponse 中获取字段,这是我的查询结果。

以下是我的查询:

{"size":99,"timeout":"10s","query":{"bool":{"filter":[{"bool":{"must":[{"range":{"LOG_GEN_TIME":{"from":"2018-11-01 12:00:01+09:00","to":"2018-11-01 23:59:59+09:00","include_lower":true,"include_upper":true,"boost":1.0}}},{"wrapper":{"query":"eyAiYm9vbCIgOiB7ICJtdXN0IiA6IFsgeyAidGVybSIgOiB7ICJBU1NFVF9JUCIgOiAiMTAuMTExLjI1Mi4xNiIgfSB9LCB7ICJ0ZXJtIiA6IHsgIkFDVElPTl9UWVBFX0NEIiA6ICIyIiB9IH0sIHsgInRlcm0iIDogeyAiRFNUX1BPUlQiIDogIjgwIiB9IH0gXSB9IH0="}}],"adjust_pure_negative":true,"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}},"_source":{"includes":["LOG_GEN_TIME","LOG_NO","ASSET_NO"],"excludes":[]},"sort":[{"LOG_GEN_TIME":{"order":"desc"}},{"LOG_NO":{"order":"desc"}}]}

当我查询时,如下所示:

SearchResponse searchResponse = request.get();

我得到了正确的结果:

{  

"took":1071,
"timed_out":false,
"_shards":{
"total":14,
"successful":14,
"skipped":0,
"failed":0
},
"_clusters":{
"total":0,
"successful":0,
"skipped":0
},
"hits":{
"total":2,
"max_score":null,
"hits":[
{
"_index":"log_20181101",
"_type":"SEC",
"_id":"1197132746951492963",
"_score":null,
"_source":{
"ASSET_NO":1,
"LOG_NO":1197132746951492963,
"LOG_GEN_TIME":"2018-11-01 09:46:28+09:00"
},
"sort":[
1541033188000,
1197132746951492963
]
},
{
"_index":"log_20181101",
"_type":"SEC",
"_id":"1197132746951492963",
"_score":null,
"_source":{
"ASSET_NO":2,
"LOG_NO":1197337264704454700,
"LOG_GEN_TIME":"2018-11-01 23:00:06+09:00"
},
"sort":[
1541080806000,
1197337264704454700
]
}
]
}
}

要使用此结果,我需要按字段和值映射它。

enter image description here

我认为有一种方法可以将字段和值映射到“fields”参数,以便我们可以很好地使用它,但我找不到。

我希望我可以这样使用结果:

SearchHit hit = ...
Map<String, SearchHitField> fields = hit.getFields();
String logNo = fields.get("LOG_NO").value();

这似乎是常见的使用方式..

还是我误解了什么?如果有更好的方法请告诉我其他方法。

如有任何评论,我们将不胜感激。谢谢。

最佳答案

我不清楚你用什么客户端来查询弹性。如果您使用elasticsearch高级休息客户端,那么您可以循环点击并获取源,您可以使用 hit.getSourceAsMap() 来获取字段的键值。

对于您的评论:

  • 首先创建一个与_source(即索引属性;数据在elastic中存储的方式)对应的POJO类
  • 使用 hit.getSourceAsString() 获取 json 格式的_source。
  • 使用 jackson ObjectMapper 将 json 映射到您的 pojo

假设您创建了一个 POJO 类AssetLog

SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit searchHit : searchHits) {
String hitJson = searchHit.getSourceAsString();
ObjectMapper objectMapper = new ObjectMapper();
AssetLog source = objectMapper.readValue(hitJson, AssetLog.class);
//Store source to map/array
}

希望这有帮助。

关于java - (JAVA、Elasticsearch)如何从 SearchResponse 获取字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53391654/

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