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

        在进行查询之前要先给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);
    }

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答一下关于如何在Spring Boot集成Elasticsearch的问题。 首先,你需要确保你的Spring Boot项目已经引入了Spring Data Elasticsearch依赖。可以在项目的pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 接下来,你需要配置Elasticsearch客户端连接信息。在application.properties(或者application.yml)文件添加以下配置: ```properties spring.data.elasticsearch.cluster-nodes=<elasticsearch服务器地址>:<端口号> ``` 配置完毕后,你可以在Spring Boot应用使用Elasticsearch的Repository接口来访问Elasticsearch。 例如,创建一个Book实体类: ```java @Document(indexName = "book") public class Book { @Id private String id; private String name; private String author; private String description; // 省略getter和setter方法 } ``` 然后创建一个继承自ElasticsearchRepository的BookRepository接口: ```java public interface BookRepository extends ElasticsearchRepository<Book, String> { List<Book> findByName(String name); } ``` 在这个接口,我们定义了一个根据书名查询书籍的方法。在使用时,可以直接注入这个接口,并调用其的方法: ```java @Service public class BookService { @Autowired private BookRepository bookRepository; public List<Book> searchBooks(String name) { return bookRepository.findByName(name); } } ``` 以上就是在Spring Boot集成Elasticsearch的基本步骤。希望可以对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值