搜索引擎ES-RestHighLevelClient
前言:本篇文章,主要讲述如何引入RestHighLevelClient,以及对其API的调用,属于入门级别的接口实用。适用于由于工作需要及时了解的童靴们以及初学者。想要了解ES底层更多内容的童鞋们,本篇文章并不适合 !
前言:对比mysql,了解ES
首先通过图片对比我们了解的关系型数据库
一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- version版本需要根据项目版本定义 -->
二、pom配置
注意:除了使用pom配置外,也可以使用配置类就行详细配置。
spring:
# 配置es
elasticsearch:
rest:
uris: 127.0.0.1:9200
username: ''
password: ''
三、接口实操
-
添加数据到ES
-
/** * 定义es的索引 */ private static final String ES_USER_INDEX = "aq_test"; /** * 插入数据到es */ @Test public void insertTest() { // 模拟数据 UserInfo userInfo = new UserInfo(1l, "张无忌", "男", 25, new Date()); try { // 1、创建request对象, IndexRequest indexRequest = new IndexRequest(ES_USER_INDEX); // 1.1、手动放入id(这里的id可以类别关系型数据的主键),如果不设置,ES会自动生成不重复的id,删除查询等操作可以使用 indexRequest.id(userInfo.getId().toString()); // 2、request放入source(可以理解为一个对象或一条数据) indexRequest.source(gson.toJson(userInfo), XContentType.JSON); // 3、请求es,存放数据 IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT); log.info("======= 保存用户到es成功,IndexResponse:{}", response); // 日志内容(注意id字段,这里使ES自动生成的id):IndexResponse:IndexResponse[index=user,type=_doc,id=3DstoYYBO8T-GorTRO2o,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}] } catch (IOException e) { log.error(e.getMessage(), e); } }
-
批量插入数据
/** * 批量保存数据到ES中 */ @Test public void bulkSaveTest() throws IOException { // 构建数据 UserInfo user1 = new UserInfo(1l, "王源", "女", 12, DateUtil.parse("2000-08-09")); UserInfo user2 = new UserInfo(2l, "易烊千玺", "男", 34, DateUtil.parse("2001-08-10")); UserInfo user3 = new UserInfo(3l, "王俊凯", "女", 62, DateUtil.parse("1988-01-23")); UserInfo user4 = new UserInfo(4l, "诸葛亮", "女", 12, DateUtil.parse("2011-08-09")); UserInfo user5 = new UserInfo(5l, "张亮", "男", 34, DateUtil.parse("2001-05-10")); UserInfo user6 = new UserInfo(6l, "张三丰", "女", 62, DateUtil.parse("1888-01-23")); UserInfo user7 = new UserInfo(7l, "上官婉儿", "女", 12, DateUtil.parse("2020-08-09")); UserInfo user8 = new UserInfo(8l, "狄仁杰", "男", 34, DateUtil.parse("2001-08-10")); UserInfo user9 = new UserInfo(9l, "艾琳", "女", 62, DateUtil.parse("1988-12-23")); // 构建indexRequest IndexRequest request1 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user1.getId().toString()); request1.source(gson.toJson(user1), XContentType.JSON); IndexRequest request2 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user2.getId().toString()); request2.source(gson.toJson(user2), XContentType.JSON); IndexRequest request3 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user3.getId().toString()); request3.source(gson.toJson(user3), XContentType.JSON); IndexRequest request4 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user4.getId().toString()); request4.source(gson.toJson(user4), XContentType.JSON); IndexRequest request5 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user5.getId().toString()); request5.source(gson.toJson(user5), XContentType.JSON); IndexRequest request6 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user6.getId().toString()); request6.source(gson.toJson(user6), XContentType.JSON); IndexRequest request7 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user7.getId().toString()); request7.source(gson.toJson(user7), XContentType.JSON); IndexRequest request8 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user8.getId().toString()); request8.source(gson.toJson(user8), XContentType.JSON); IndexRequest request9 = new IndexRequest(ES_USER_INDEX, ES_USER_TYPE, user9.getId().toString()); request9.source(gson.toJson(user9), XContentType.JSON); // 构建bulkrequest对象 BulkRequest bulkRequest = new BulkRequest(); bulkRequest.add(request2).add(request3).add(request4) .add(request1).add(request5).add(request6).add(request7) .add(request8).add(request9); // 批量保存 BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); log.info("========== 批量保存成功,response:{}", bulk); }
-
-
删除数据
文章来源:https://www.toymoban.com/news/detail-477278.html
/** * 删除 */ @Test public void deleteTest() throws IOException { // 1、DeleteRequest(String index, String id) 调用构造器构建对象,此时id派上用场 DeleteRequest deleteRequest = new DeleteRequest(ES_USER_INDEX, "_NnfrIQBbL1dGMv_ESXr"); // 2、删除数据 DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT); log.info("============= 删除es成功,DeleteResponse:{}", response); } /** * 批量删除 */ @Test public void deleteTest() { // 批量删除 DeleteRequest deleteRequest1 = new DeleteRequest(ES_USER_INDEX, "1"); DeleteRequest deleteRequest2 = new DeleteRequest(ES_USER_INDEX, "2"); DeleteRequest deleteRequest3 = new DeleteRequest(ES_USER_INDEX, "3"); DeleteRequest deleteRequest4 = new DeleteRequest(ES_USER_INDEX, "4"); DeleteRequest deleteRequest5 = new DeleteRequest(ES_USER_INDEX, "5"); DeleteRequest deleteRequest6 = new DeleteRequest(ES_USER_INDEX, "6"); DeleteRequest deleteRequest7 = new DeleteRequest(ES_USER_INDEX, "7"); // 2、构建BulkRequest BulkRequest bulkRequest = new BulkRequest().add(deleteRequest1) .add(deleteRequest2).add(deleteRequest3).add(deleteRequest4) .add(deleteRequest6).add(deleteRequest5).add(deleteRequest7); try { // 3、调用bulk方法批量操作删除 BulkResponse response = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); log.info("============= 删除es成功,DeleteResponse:{}", response); } catch (IOException e) { e.printStackTrace(); } }
-
查询数据
/** * 查询所有的数据 * @throws IOException */ @Test public void searchAllTest() throws IOException { // 1、创建 SearchRequest SearchRequest searchRequest = new SearchRequest(ES_USER_INDEX); // 2、创建SearchSourceBuilder SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 3、创建QueryBuilder MatchAllQueryBuilder queryBuilder = new MatchAllQueryBuilder(); // 使用查询构建工具类来创建QueryBuilder // MatchAllQueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); // 4、把QueryBuilder 放入 sourceBuilder中 searchSourceBuilder.query(queryBuilder); // 5、把searchSourceBuilder放入searchRequest中 searchRequest.source(searchSourceBuilder); // 6、查询 SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 7、结果解析 SearchHits hits = search.getHits(); List<UserInfo> result = Arrays.stream(hits.getHits()).map(hit -> { UserInfo userInfo = gson.fromJson(hit.getSourceAsString(), UserInfo.class); return userInfo; }).collect(Collectors.toList()); } /** * <h3>term与match 的区别:</h3> * <li>term:代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词解析,直接对搜索词进行查找;</li> * <li>match:代表模糊匹配,搜索前会对搜索词进行分词解析,然后按分词匹配查找;</li> * <li>term主要用于精确搜索,match则主要用于模糊搜索;</li> * <li>term精确搜索相较match模糊查询而言,效率较高;</li> * * <h3>数据类型:text(缺省值)和keyword 的区别</h3> * <li>text:查询时会进行分词解析;</li> * <li>keyword:keyword类型的词不会被分词器进行解析,直接作为整体进行查询;</li> * @throws IOException */ @Test public void searchTest2() throws IOException { SearchRequest searchRequest = new SearchRequest(ES_USER_INDEX); SearchSourceBuilder sourceBuilderByMatch = new SearchSourceBuilder().query(QueryBuilders.matchQuery("name", "王俊凯")); SearchSourceBuilder sourceBuilderByTerm = new SearchSourceBuilder().query(QueryBuilders.termQuery("name", "王")); /** * match查询 */ searchRequest.source(sourceBuilderByMatch); SearchResponse searchByMatch = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 遍历封装列表对象 List<UserInfo> userListByMatch = Arrays.stream(searchByMatch.getHits().getHits()).map(searchHit -> { return JSON.parseObject(searchHit.getSourceAsString(), UserInfo.class); }).collect(Collectors.toList()); /** * term 查询 */ searchRequest.source(sourceBuilderByTerm); SearchResponse searchByTerm = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 遍历封装列表对象 List<UserInfo> userListByTerm = Arrays.stream(searchByTerm.getHits().getHits()).map(searchHit -> { return JSON.parseObject(searchHit.getSourceAsString(), UserInfo.class); }).collect(Collectors.toList()); } /** * <h3>分页 排序</h3> * <p>size 指定查询结果中返回指定条数。</p> * <p>from 用来指定起始返回位置,和size关键字连用可实现分页效果</p> * <p>深度分页的情况下,这种分页效率较低</p> * es目前支持最大的max_result_window = 10000,也就是from+size的大小不能超过10000 * @throws IOException */ @Test public void searchTestBySortPage() throws IOException { SearchRequest searchRequest = new SearchRequest(ES_USER_INDEX); SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()); query.sort("age", SortOrder.DESC); query.from(0); query.size(5); searchRequest.source(query); SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 遍历封装列表对象 List<UserInfo> userListByMatch = Arrays.stream(response.getHits().getHits()).map(searchHit -> { return JSON.parseObject(searchHit.getSourceAsString(), UserInfo.class); }).collect(Collectors.toList()); }
FAULT);文章来源地址https://www.toymoban.com/news/detail-477278.html
// 遍历封装列表对象
List<UserInfo> userListByMatch = Arrays.stream(response.getHits().getHits()).map(searchHit -> {
return JSON.parseObject(searchHit.getSourceAsString(), UserInfo.class);
}).collect(Collectors.toList());
}
到了这里,关于搜索引擎ES-RestHighLevelClient的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!