当前位置: 首页 > article >正文

027 elasticsearch查询数据-Java原生客户端

文章目录


1步骤
1.创建一个client对象
2.使用client的search方法实现查询操作
3.需要SearchRequest参数
4.request对象中需要有索引的名称
5.request对象中需要包含请求体
6.请求体中包含查询条件,分页条件、过滤条件、高亮条件等
7.执行查询
8.从查询结果中取数据
2返回结果
total().value属性:命中的所有记录数
默认是有分页的,默认返回前10条数据
文档是包含在searchHits数组中
3查询条件
封装到SearchRequest对象中,其中查询条件需要封装到SearchSourceBuilder中
其中包含:
查询条件:QueryBuilders工具类创建
分页信息:from、size
过滤条件:filter实现过滤,过滤条件可以有多个

package com.xd.cubemall.es;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.stream.Stream;

public class IndexSearchTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void init() {
        //创建一个client对象
        client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
    }

    @Test
    public void searchIndex1() throws Exception {
        //http://1.1.1.1:9200/hello1/_search
        //{
        //"query":{"match_all":{}}
        //}
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.matchAllQuery())
                );
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> System.out.println(e.getSourceAsString()));

    }
}

package com.xd.cubemall.es;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.stream.Stream;

public class IndexSearchTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void init() {
        //创建一个client对象
        client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
    }

    @Test
    public void searchIndex1() throws Exception {
        //http://1.1.1.1:9200/hello1/_search
        //{
        //"query":{"match_all":{}}
        //}
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.matchAllQuery())
                );
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> System.out.println(e.getSourceAsString()));

    }


    @Test
    public void termQuery() throws Exception {
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.termQuery("title","品牌"))
                );

        printResult(request);


    }

    private void printResult(SearchRequest request) throws Exception {
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> {
            System.out.println(e.getSourceAsString());
            System.out.println(e.getHighlightFields());
        });
    }


    @Test
    public void searchPage() throws Exception {
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        //查询条件
                        .query(QueryBuilders.matchQuery("title","明星开饭店频翻车奔跑吧"))
                        //过滤
                        .postFilter(QueryBuilders.termQuery("title","明星"))
                        .postFilter(QueryBuilders.termQuery("content","围城"))
                        //高亮显示
                        .highlighter(new HighlightBuilder()
                                .field("title")
                                .field("content")
                                .preTags("<em>")
                                .postTags("</em>")
                        )
                        //分页条件
                        .from(0)
                        .size(30)
                );
        printResult(request);
    }

}


http://www.kler.cn/news/362514.html

相关文章:

  • raidrive 访问搭建的ftp服务报错超时的情况
  • 记录一次从nacos配置信息泄露到redis写计划任务接管主机
  • 【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅
  • 京东笔试题
  • three.js 使用geojson ,实现中国地图区域,边缘流动效果
  • unity学习-全局光照(GI)
  • 前后端请求一致性学习
  • 解析NIO
  • 如何在 JavaScript 项目中限制Node.js版本
  • 【动手学电机驱动】 TI InstaSPIN-FOC(7)Lab05b 速度环控制
  • RabbitMQ进阶_可靠性
  • 大数据新视界 --大数据大厂之 Snowflake 在大数据云存储和处理中的应用探索
  • 网络安全的挑战与对策:从技术防御到综合治理的全方位分析
  • 阵痛中转型,商汤瘦身背后的AI真相
  • js如何获取一个object的第一条数据
  • Java设计模式——适配器模式
  • 开发面试题-更新中...
  • ansible.builtin 和 ansible.posix的区别
  • leetcode hot100 之【LeetCode 141. 环形链表】 java实现
  • sql注入 --二次注入堆叠注入文件读取getshell
  • Shiro 授权(Authorization)总结
  • swagger讲解
  • 集群Spring定时只执行一次
  • 查收查引常用数据库——万方
  • 矩阵基础知识
  • Docker容器间链路管理