搜索引擎ES-RestHighLevelClient

这篇具有很好参考价值的文章主要介绍了搜索引擎ES-RestHighLevelClient。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

搜索引擎ES-RestHighLevelClient

前言:本篇文章,主要讲述如何引入RestHighLevelClient,以及对其API的调用,属于入门级别的接口实用。适用于由于工作需要及时了解的童靴们以及初学者。想要了解ES底层更多内容的童鞋们,本篇文章并不适合 !

前言:对比mysql,了解ES

首先通过图片对比我们了解的关系型数据库

搜索引擎ES-RestHighLevelClient

一、引入依赖

		<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: ''

三、接口实操

  1. 添加数据到ES

    1. 	/**
           * 定义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);
              }
          }
      
    2. 批量插入数据

      	/**
           * 批量保存数据到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);
      
          }
      
  2. 删除数据

    	/**
         * 删除
         */
        @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();
            }
        }
    
  3. 查询数据

    	/**
         * 查询所有的数据
         * @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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得

    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,

    2024年02月04日
    浏览(57)
  • Elasticsearch (ES) 搜索引擎: 搜索功能:搜索分页、搜索匹配、全文搜索、搜索建议、字段排序

    原文链接:https://xiets.blog.csdn.net/article/details/132348920 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) ES 搜索 API 官网文档:Search APIs 先创建一个索引,并写入一些文档用于搜索示例: 写入一些文档示例: 官网API:The _source option 搜索结果中的文档数据封装

    2024年02月08日
    浏览(45)
  • 分布式搜索引擎es-3

    什么是聚合? 聚合 可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么 品牌 的手机最受欢迎? 这些手机的 平均 价格、 最高 价格、 最低 价格? 这些手机每 月的销售情况 如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实

    2024年02月07日
    浏览(34)
  • 分布式搜索分析引擎ES

    es是实时的分布式搜索分析引擎: 实时表现在新增到ES中的数据1s中就可以被检索到,这种新增数据对搜索的可见性成为“准实时搜索”。 分布式意味着可以动态调整集群规模,弹性扩容,支持上百个节点,相比 HDFS 等上千台的集群,更适合中等数据量的业务,不适合存储海

    2024年03月12日
    浏览(35)
  • 分布式搜索引擎es 面试突击

    es elastocsearch 倒排索引 是在数据查询之前建立,在查询的时候可以直接通过定位到文档内容。用空间换时间 分布式架构原理说一下? es底层是基于lucene来的   大概就是一个用于全文检索的jar包 用es来做分布式的搜索引擎  可以承载一秒钟几千的搜索 es用来存储数据的

    2024年02月06日
    浏览(30)
  • ElasticSearch内容分享(四):ES搜索引擎

    目录 ES搜索引擎 1. DSL设置查询条件 1.1 DSL查询分类 1.2 全文检索查询 1.2.1 使用场景 1.2.2 match查询 1.2.3 mulit_match查询 1.3 精准查询 1.3.1 term查询 1.3.2 range查询 1.4 地理坐标查询 1.4.1 矩形范围查询 1.4.2 附近(圆形)查询 1.5 复合查询 1.5.0 复合查询归纳 1.5.1 相关性算分 1.5.2 算分函数查

    2024年02月05日
    浏览(40)
  • 入门ElasticSearch :为什么选择ES作为搜索引擎?

    随着数据量的不断增长,搜索和分析大规模数据集变得越来越重要。传统数据库在面对这种需求时往往表现不佳,这时候就需要一种专门用于搜索和分析的引擎。ElasticSearch (简称ES)就是这样一款强大的搜索引擎,它具有许多优势,使得它成为许多企业和开发者的首选。 简

    2024年02月09日
    浏览(36)
  • Elasticsearch (ES) 搜索引擎: 文本搜索:分析器/分词器、同义词/停用词、拼音搜索、高亮显示、拼写纠错

    原文链接:https://xiets.blog.csdn.net/article/details/132349032 版权声明:原创文章禁止转载 专栏目录:Elasticsearch 专栏(总目录) 文本搜索主要指的就是全文搜索,全文搜索是搜索引擎的核心功能,与精确匹配的结构化数据不同,文本(text)数据在构建索引和搜索时都需要进行额外的处

    2024年02月03日
    浏览(44)
  • ES数据存储搜索引擎入门到整合Springboot一章直达

    前言 学习一门语言,我们从熟悉其语法开始,慢慢深入动手实践,并开始将其使用到对应的场景上,当我们遇到相应的问题,能够联想到使用该技术,并能够信手拈来的时候,才是我们真正掌握了一门技术或者语言的时候。学习的时候可以和其他学过的知识点相关联,如ES可

    2024年02月02日
    浏览(31)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包