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 字段表示搜索耗时,单位为毫秒。

相关内容

热门资讯

计算机组成原理实验1---运算...     本实验为哈尔滨工业大学计算机组成原理实验,实验内容均为个人完成,...
3 ROS1通讯编程提高(1) 3 ROS1通讯编程提高3.1 使用VS Code编译ROS13.1.1 VS Code的安装和配置...
前端-session、jwt 目录:   (1)session (2&#x...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
EL表达式JSTL标签库 EL表达式     EL:Expression Language 表达式语言     ...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
【Spring Cloud A... 文章目录前言Metadata元数据ClassMetadataSpring中常见的一些元注解Nacos...
React篇-关于React的... 一.简介1.介绍用于构建用户界面的 JavaScript 库2.创建项目(1)手动创建Documen...
win7 Pro 英文版添加中... win7pro x64英文版添加中文语言包1、下载语言包,并解压成lp.cab,复制到...
Android开发-Andro... 01  Android UI 1.1  UI 用户界面(User Interface,...
基于springboot教师人... 基于springboot教师人事档案管理系统【源码+论文】 开发语言:Jav...
编写软件界面的方式 本文重点解决如下问题:编写软件的界面有哪几种方式?通常情形下࿰...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
GO语言小锤硬磕十三、数组与切... 数组用来保存一组相同类型的数据,go语言数组也分一维数组和多维数组。 直接上代码看一下...
三级数据库备考--数据库应用系... 1.数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤,每个步骤的设计活动按照...
prometheus数据持久化... https://segmentfault.com/a/1190000015710814 promet...
孩子用什么样的灯对眼睛没有伤害... 现代社会高速发展,越来越多的人开始重视身体健康,尤其是很多家长ÿ...
微软Bing GPT支持AI绘... 我想要一张图片:大象、珊瑚、火山、云朵我想要一张图片:亚特兰蒂斯...
最新!5月IPO受理数创今年新... IPO市场新动态。5月30日,共有4家IPO企业获得受理,其中创业板打破今年“0受理”现象,迎来首批...