ElasticSearch - SpringBoot整合ES:解析搜索返回字段
创始人
2025-05-31 14:07:38
0

文章目录

      • 1. 数据构造
      • 2. ElasticSearch 查询集群中所有索引中的所有文档
      • 3. ElasticSearch 搜索结果字段解析
        • 1. took 搜索请求耗费了多少毫秒
        • 2. shards 查询中参与分片的总数
        • 3. timed_out 查询是否超时
        • 4. hits 表示搜索结果
      • 4. SpringBoot 整合ElasticSearch获取搜索结果
      • 5 .ElasticSearch 搜索结果的面试题
        • 1. ElasticSearch 搜索结果中的 _score 字段是什么意思?
        • 2. ElasticSearch 搜索结果中的 highlight 字段是什么意思?
        • 3. 如何获取 ElasticSearch 搜索结果中的总文档数?
        • 4. 如何获取 ElasticSearch 搜索结果中的匹配文档列表?
        • 5. 如何获取 ElasticSearch 搜索结果中匹配文档的原始数据?
        • 6. 如何获取 ElasticSearch 搜索结果中匹配文档的高亮显示信息?
        • 7. ElasticSearch 搜索结果中的 _shards 字段是什么意思?
        • 8. ElasticSearch 搜索结果中的 took 字段是什么意思?

ElasticSearch - SpringBoot整合ES之获取搜索结果

1. 数据构造

索引2个文档到 hotel 索引中:

PUT /hotel/_doc/1
{"title": "文雅酒店","city": "青岛","price": 556,"create_time": "20200418120000","amenities": "浴池,普通停车场/充电停车场","full_room": false,"location": {"lat": 36.083078,"lon": 120.37566},"praise": 10
}PUT /hotel/_doc/2
{"title": "金都嘉怡假日酒店","city": "北京","price": 337,"create_time": "20210315200000","amenities": "wifi,充电停车场/可升降停车场","full_room": false,"location": {"lat": 39.915153,"lon": 116.403},"praise": 60
}

2. ElasticSearch 查询集群中所有索引中的所有文档

 GET /hotel/_search
{"took" : 499,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "hotel","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"title" : "金都嘉怡假日酒店","city" : "北京","price" : 337,"create_time" : "20210315200000","amenities" : "wifi,充电停车场/可升降停车场","full_room" : false,"location" : {"lat" : 39.915153,"lon" : 116.403},"praise" : 60}},{"_index" : "hotel","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"title" : "文雅酒店","city" : "青岛","price" : 556,"create_time" : "20200418120000","amenities" : "浴池,普通停车场/充电停车场","full_room" : false,"location" : {"lat" : 36.083078,"lon" : 120.37566},"praise" : 10}}]}
}

3. ElasticSearch 搜索结果字段解析

1. took 搜索请求耗费了多少毫秒

took 值告诉我们执行整个搜索请求耗费了多少毫秒。

2. shards 查询中参与分片的总数

_shards 部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。

3. timed_out 查询是否超时

timed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。

4. hits 表示搜索结果

返回结果中最重要的部分是 hits ,它包含 total 字段来表示匹配到的文档总数,并且一个 hits 数组包含所查询结果的前十个文档。在解析搜索结果时,我们通常需要关注以下几个字段:

hits.total.value:匹配的文档总数。
hits.max_score:与查询所匹配文档的_score的最大值。
hits.hits:匹配的文档列表。
hits.hits._source:匹配的文档的原始数据。
hits.hits._score:匹配的文档的分数。它衡量了文档与查询的匹配程度,默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照score 降序排列的。
hits.hits.highlight:匹配的文档的高亮显示信息。

4. SpringBoot 整合ElasticSearch获取搜索结果

@Slf4j
@Service
public class ElasticSearchImpl {@Autowiredprivate RestHighLevelClient restHighLevelClient;public void searchUser() throws IOException {SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();SearchRequest searchRequest = new SearchRequest(new String[]{"hotel"},searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);TimeValue took = searchResponse.getTook();System.out.println("took = " + took);// 搜索结果SearchHits searchHits = searchResponse.getHits();// hits.total.value:匹配的文档总数TotalHits totalHits = searchHits.getTotalHits();long value = totalHits.value;System.out.println("value = " + value);// hits.max_score:与查询所匹配文档的_score的最大值float maxScore = searchHits.getMaxScore();System.out.println("maxScore = " + maxScore);// hits.hits:匹配的文档列表SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {// hits.hits._source:匹配的文档的原始数据String sourceAsString = hit.getSourceAsString();System.out.println("sourceAsString = " + sourceAsString);//  hits.hits._id:匹配的文档的idString id = hit.getId();System.out.println("id = " + id);Map fields = hit.getFields();System.out.println("fields = " + fields);String index = hit.getIndex();System.out.println("index = " + index);float score = hit.getScore();System.out.println("score = " + score);}System.out.println(searchResponse);}
}
took=2ms
value = 2
maxScore = 1.0sourceAsString = {"title":"金都嘉怡假日酒店","city":"北京","price":337,"create_time":"20210315200000","amenities":"wifi,充电停车场/可升降停车场","full_room":false,"location":{"lat":39.915153,"lon":116.403},"praise":60}
id = 2
fields = {}
index = hotel
score = 1.0sourceAsString = {"title":"文雅酒店","city":"青岛","price":556,"create_time":"20200418120000","amenities":"浴池,普通停车场/充电停车场","full_room":false,"location":{"lat":36.083078,"lon":120.37566},"praise":10}
id = 1
fields = {}
index = hotel
score = 1.0
{"took": 2,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "hotel","_type": "_doc","_id": "2","_score": 1.0,"_source": {"title": "金都嘉怡假日酒店","city": "北京","price": 337,"create_time": "20210315200000","amenities": "wifi,充电停车场/可升降停车场","full_room": false,"location": {"lat": 39.915153,"lon": 116.403},"praise": 60}},{"_index": "hotel","_type": "_doc","_id": "1","_score": 1.0,"_source": {"title": "文雅酒店","city": "青岛","price": 556,"create_time": "20200418120000","amenities": "浴池,普通停车场/充电停车场","full_room": false,"location": {"lat": 36.083078,"lon": 120.37566},"praise": 10}}]}
}

5 .ElasticSearch 搜索结果的面试题

1. ElasticSearch 搜索结果中的 _score 字段是什么意思?

答:_score 字段表示匹配文档的相关度得分,分数越高表示匹配度越高。

2. ElasticSearch 搜索结果中的 highlight 字段是什么意思?

答:highlight 字段表示匹配文档中被高亮显示的字段及其高亮显示的内容。

3. 如何获取 ElasticSearch 搜索结果中的总文档数?

答:可以通过 hits.total.value 字段获取匹配的文档总数。

4. 如何获取 ElasticSearch 搜索结果中的匹配文档列表?

答:可以通过 hits.hits 字段获取匹配的文档列表。

5. 如何获取 ElasticSearch 搜索结果中匹配文档的原始数据?

答:可以通过 hits.hits._source 字段获取匹配文档的原始数据。

6. 如何获取 ElasticSearch 搜索结果中匹配文档的高亮显示信息?

答:可以通过 hits.hits.highlight 字段获取匹配文档的高亮显示信息。

7. ElasticSearch 搜索结果中的 _shards 字段是什么意思?

答:_shards 字段表示搜索涉及的分片信息,包括总分片数、成功的分片数、跳过的分片数和失败的分片数。

8. ElasticSearch 搜索结果中的 took 字段是什么意思?

答:took 字段表示搜索耗时,单位为毫秒。

相关内容

热门资讯

豪掷23亿!追觅创始人俞浩入主... 出品|达摩财经12月16日晚,嘉美包装(002969.SZ)发布公告称,公司控股股东中包香港与逐越鸿...
嘎巴一下,就死了 图: gothic_jang闲聊聊。上次聊照护老人的话题,一位读者留言引起了热议:“丁香医生说坚持健...
华海财险股权变局:曾借虚假股东... 专为保险业 打造的垂直新媒体平台华海财产保险股份有限公司(下称“华海财险”)原始股东或将回归。日前,...
富泽人寿获批开业:170亿“身... 专为保险业 打造的垂直新媒体平台君康人寿风险处置的靴子,正式落地。今日,金融监督管理总局山东监管局发...
001330,今日跌停 2025.12.16本文字数:776,阅读时长大约2分钟作者 |第一财经 揭书宜12月16日,博纳影...
杨瀚森G联赛首发出战砍18分1... 北京时间12月16日,G联赛撕裂之城混音队主场迎战斯托克顿国王队,本场比赛杨瀚森首发出战。此役,开拓...
大陆集团三季度净利润4.86亿... 11月11日消息,大陆集团发布2024年第三季度业绩:销售额为98亿欧元,同比减少4.0%;调整后的...
印度据悉将传唤亚马逊和Flip... 11月11日消息,据报道,印度政府一位高级消息人士表示,印度金融犯罪机构将传唤印度最大电子商务零售商...
中兴通讯涨停创阶段新高,三机构... 11月11日消息,中兴通讯(000415.SZ)今日涨停,股价创2023年8月以来新高,成交额88....
工信部印发《重点工业产品碳足迹... 11月11日消息,为加快提升重点工业产品碳排放管理水平,促进行业绿色低碳转型,支撑实现碳达峰碳中和目...