在SpringBoot中对es集群的查询操作

news/2024/7/7 5:54:17 标签: elasticsearch, 大数据, 搜索引擎

        在进行查询之前要先给ll索引中插入数据:

 POST /ll/product/1
{
	"id":1,
 "title": "小米手机Mix",
 "category": "手机",
 "brand": "小米",
 "price": 2899.00,
 "images": "http://image.ll.com/12479122.jpg"

}

POST /ll/product/2
{
	"id":2,
 "title": "坚果手机R1",
 "category": "手机",
 "brand": "锤子",
 "price": 3699.00,
 "images": "http://image.ll.com/12479122.jpg"

}

POST /ll/product/3
{
	"id":3,
 "title": "华为META20",  
 "category": "手机",
 "brand": "华为",
 "price": 4499.00,
 "images": "http://image.ll.com/12479122.jpg"

}

POST /ll/product/4
{
	"id":4,
 "title": "小米Pro",
 "category": "手机",
 "brand": "小米",
 "price": 4299.00,
 "images": "http://image.ll.com/12479122.jpg"

}

POST /ll/product/5
{
	"id":5,
 "title": "荣耀V20",
 "category": "手机",
 "brand": "华为",
 "price": 2799.00,
 "images": "http://image.ll.com/12479122.jpg"

}

            将以上代码复制到kibana的控制台上运行

         运行完后可以到打开head插件查看信息

 

        数据准备完成后我们就可以开始查询了

      1.查询所有索引的数据          match_all

  @Test//搜索数据
    public void search() throws IOException{
        SearchRequest request = new SearchRequest();//搜索对象

        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//构建工具
         //绑定类型       match_all,math,bool,term,fuzzy,filter
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        //执行查询操作
        request.source(sourceBuilder);
        //执行查询搜索
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //解析响应的结果数据
        SearchHit[] hits = response.getHits().getHits();
        for (SearchHit hit : hits) {
            String json = hit.getSourceAsString();//转为json格式
            Producter producter = gson.fromJson(json, Producter.class);//转为java对象
            System.err.println(producter);
        }
    }

        

        2.关键字查询           match 

   @Test//matchquery
    public void matchQuery()throws Exception{
        SearchRequest request = new SearchRequest();

        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchQuery("title", "小米"));

        request.source(sourceBuilder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHit[] hits = response.getHits().getHits();
        for (SearchHit hit : hits) {
            String json = hit.getSourceAsString();//转为json格式
            Producter producter = gson.fromJson(json, Producter.class);//转为java对象
            System.err.println(producter);
        }
    }

        通过上述两个查询我们发现,查询数据的时候会有很多冗余的部分,所以我们可以将这一部分代码进行封装,在查询的时候调用这个方法,下面的查询我都会调用封装的方法

    public void basicQuery(SearchSourceBuilder sourceBuilder) throws Exception{
        SearchRequest request = new SearchRequest();

        request.source(sourceBuilder);

        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //解析响应的结果数据
        SearchHit[] hits = response.getHits().getHits();
        for (SearchHit hit : hits) {
            String json = hit.getSourceAsString();//转为json格式
            Producter producter = gson.fromJson(json, Producter.class);//转为java对象
            System.err.println(producter);
        }
    }

         3.范围查询         range

@Test//范围查询
    public void rangeQuery()  throws Exception{
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.rangeQuery("price").gte(3000).lt(4300));
        basicQuery(sourceBuilder);
    }

         4.过滤查询        source

 @Test//过滤查询
    public void  sourceQuery()  throws Exception{
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        //添加过滤条件
        sourceBuilder.fetchSource(new String[]{"id","title","price"},null);
        basicQuery(sourceBuilder);
    }

       5.排序        sort

    @Test//排序 order
    public void  orderQuery()  throws Exception{
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        //添加排序条件
        sourceBuilder.sort("price", SortOrder.DESC);//desc降序        asc升序
        basicQuery(sourceBuilder);
    }

        6. 分页        page

 @Test//分页 from当前页第一条数据的索引     size当前页的大小
    public void  pageQuery()  throws Exception{
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        //添加分页条件
        int page = 2;//第二页的数据
        int size = 3;//每页展示三条数据
        sourceBuilder.from((page-1)*size);
        sourceBuilder.size(size);


        basicQuery(sourceBuilder);
    }

   


http://www.niftyadmin.cn/n/1827690.html

相关文章

面试题收集——Java基础部分(一)

面试题收集——Java基础部分(一) 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2、Java有没…

VII Python(2)基础知识

VII Python(2)基础知识每种语言都各具特色,在各自领域都有其适用范围,python只是其中一种,在应用方面表现较好,是一种面向对象、解释型计算机程序设计语言,有丰富强大的类库,常被昵称…

一种简单的数据库性能测试方法

这两天接到一个任务,要测试一个服务器的性能,客户要求向数据库内 1000/s(每插入一千条数据) 的处理能力,当时脑子赌赛了,想的是用LR来进行,由于LR接触不深,只知道LR实现参数化的时候…

【Mongodb】Sharding 集群配置

mongodb的sharding集群由以下3个服务组成:Shards Server: 每个shard由一个或多个mongod进程组成,用于存储数据Config Server: 用于存储集群的Metadata信息,包括每个Shard的信息和chunks信息Route Server: 用于提供路由服务,由…

筛法求素数(普通筛法与欧拉筛法) 这是个问题

不论是一般的筛法求素数还是改进的欧拉筛法,每次要用的时候就忘了具体怎么实现的。欲成一劳永逸之功,写了这篇博客。勉之勉之 筛法求素数的原理: 通俗的来说就是象一个筛芝麻的大筛子,筛掉其中不合格的部分,那么剩下的…

Atitit 边缘检测原理attilax总结

Atitit 边缘检测原理attilax总结 1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. rewitt边缘检测算子2 3.3. sobel边缘检测算子(较为常用)2 4. Canny边缘检测(最常用…

大数据相关服务之间的关系

转载于:https://www.cnblogs.com/kdxb/p/7274652.html

导数据方法

<?php// 写如sql语句// 查询所有商品的信息及店铺信息echo <meta charset"utf-8">;include ./mysql.php;/*** 执行简单的插入* access public* parameter goal 目标表* parameter rest 来源表* parameter goal 来源字段* import_insert(33hao_goods_class(…