zoukankan      html  css  js  c++  java
  • ES基本语法的Java客户端操作

    导包

    <!-- fastjson 对象和json转换 -->
    <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.58</version>
    </dependency>
    <!--es 高级版本操作坐标-->
    <dependency>
           <groupId>org.elasticsearch.client</groupId>
           <artifactId>elasticsearch-rest-high-level-client</artifactId>
           <version>6.8.3</version>
    </dependency>
    <!--es依赖-->
    <dependency>
           <groupId>org.elasticsearch</groupId>
           <artifactId>elasticsearch</artifactId>
           <version>6.8.3</version>
    </dependency>

    先准备一份数据库和表

    PUT /root02
    {
      "mappings": {
        "product": {
          "properties": {
            "id": {
              "type": "keyword"
            },
            "title": {
              "type": "text",
              "analyzer": "ik_max_word"
            },
            "category": {
              "type": "keyword"
            },
            "brand": {
              "type": "keyword"
            },
            "images": {
              "type": "keyword",
              "index": false
            },
            "price": {
              "type": "double"
            }
          }
        }
      }
    }

    创建一个对应的实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Product {
    
        private Long id;
    
        /**
         * 标题
         */
        private String title;
    
        /**
         * 分类
         */
        private String category;
    
        /**
         *    品牌
         */
        private String brand;
    
        /**
         *  价格
         */
        private Double price;
    
        /**
         * 图片地址
         */
        private String images;
       
    }

    这里的案例使用测试类进行

    1.增删改和简单查

    API

    java连接至es

    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("x.x.x.x", 9200, "http")));

    增删改和简单查

    //新增
    IndexRequest indexRequest = new IndexRequest("root02", "product", "1");
    
    //根据id查询
    GetRequest getRequest = new GetRequest("root02", "product", "1");
    
    //修改数据
    final UpdateRequest updateRequest = new UpdateRequest("root02", "product", "1");
    
    //删除根据id
    DeleteRequest deleteRequest = new DeleteRequest("root02", "product", "1");
    
    //批量添加
    BulkRequest bulkRequest = new BulkRequest();

    使用

    public class TestClass {
        RestHighLevelClient client;
    
        @BeforeEach
        public void before() {
            client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("62.234.118.219", 9902, "http")));
        }
    
        /*
            文档新增
         */
        @Test
        public void add() throws IOException {
            //1.创建请求对象
            /*
                第一个参数: 索引库名称
                第二个参数: 类型名称
                第三个参数: 可选项,id
             */
            IndexRequest indexRequest = new IndexRequest("root02", "product", "1");
            //2.准备数据---》json
            Product product = new Product(1L, "小米手机", "手机", "小米", 2699.00, "http://www.baidu.com");
            String jsonString = JSON.toJSONString(product);
            //3.将数据封装到请求对象
            indexRequest.source(jsonString, XContentType.JSON);
            //4.发送请求
            IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
            //5.打印结果
            System.out.println("结果: " + indexResponse);
        }
    
        /*
        根据id查询文档
        */
        @Test
        public void getById() throws IOException {
            //1.创建查询对象并且设置查询id
            GetRequest getRequest = new GetRequest("root02", "product", "1");
            //2.发送请求
            final GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
            System.out.println(documentFields);
        }
    
        /*
        修改文档
       */
        @Test
        public void updateDocById() throws IOException {
            final UpdateRequest updateRequest = new UpdateRequest("root02", "product", "1");
            //2.组装修改内容---》json
            Product product = new Product(1L, "大米手机", "手机", "大米", 19999.00, "http://www.baidu.com");
            String jsonString = JSON.toJSONString(product);
            //3.将修改内容封装到修改对象
            updateRequest.doc(jsonString, XContentType.JSON);
            final UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
            System.out.println(update);
        }
    
        //删除文档
        @Test
        public void delById() throws IOException {
            //1.创建删除对象
            DeleteRequest deleteRequest = new DeleteRequest("root02", "product", "1");
            //2.发送请求
            DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
            System.out.println("结果: " + deleteResponse);
        }
    
        /*
            批量新增
        */
        @Test
        public void batchAddDoc() throws IOException {
            //1.创建批量请求对象
            BulkRequest bulkRequest = new BulkRequest();
            //2.for循环创建对象----》IndexRequest---》json
            for (long i = 2; i < 10; i++) {
                IndexRequest indexRequest = new IndexRequest("root02", "product", i + "");
                //2.准备数据---》json
                Product product = new Product(i, "小米手机" + i, "手机", "小米", 2699.00 + i, "http://www.baidu.com");
                String jsonString = JSON.toJSONString(product);
                //3.将数据封装到请求对象
                indexRequest.source(jsonString, XContentType.JSON);
                //4.将IndexRequest封装到批量请求对象
                bulkRequest.add(indexRequest);
            }
            //4.发送请求
            BulkResponse bulkResponse = null;
            bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
            System.out.println("结果: " + bulkResponse);
        }
    
        @AfterEach
        public void close() throws IOException {
            client.close();
        }
    }

    2.复杂查询

    //创建searchRequest请求对象
    RestHighLevelClient client;

    //创建searchRequest请求对象
    SearchRequest searchRequest = new SearchRequest("root02");

    //创建searchSourceBuilder对象--》封装查询对象
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

    核心对象

    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    //封装了各种查询方法

    对象关系

      SearchRequest -->封装 SearchSourceBuilder -->封装 QueryBuilder

      RestHighLevelClient --> 携带封装好的 SearchRequest 发送请求

    使用

    public class Test02 {
        RestHighLevelClient client;
        //1.创建searchRequest请求对象
        SearchRequest searchRequest = new SearchRequest("root02");
        //2.创建searchSourceBuilder对象-->封装查询对象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    
        @BeforeEach
        public void before() {
            client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("62.234.118.219", 9902, "http")));
        }
    
        /*
            查询所有
         */
        @Test
        public void matchAll() throws IOException {
            //创建查询对象QueryBuilder
            QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
            //封装查询对象
            searchSourceBuilder.query(queryBuilder);
            //searchSourceBuilder封装到searchRequest对象中
            searchRequest.source(searchSourceBuilder);
            showContext();
        }
    
        /*
        模糊匹配查询
     */
        @Test
        public void matchDoc() throws IOException {
            //3.创建查询对象
            QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "小米");
            searchSourceBuilder.query(queryBuilder);
            searchRequest.source(searchSourceBuilder);
            //发送请求
            showContext();
        }
    
        /*
        精确查询,一般用于查询不分词字段
        */
        @Test
        public void term() throws IOException {
            QueryBuilder queryBuilder = QueryBuilders.termQuery("price", 2706);
            searchSourceBuilder.query(queryBuilder);
            searchRequest.source(searchSourceBuilder);
            showContext();
        }
    
        //排序,高亮,分页查询
        @Test
        public void commons() throws IOException {
            QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "小米");
            searchSourceBuilder.query(queryBuilder);
             /*
                排序
            //默认升序排序
                分页:
                    size: 页大小
                    from: 起始索引位置 int start = (pagenum -1) * pagesize_
                高亮:设置条件
                    前置标签:
                    后置标签:
                    高亮字段:
             */
            HighlightBuilder highlightBuilder = new HighlightBuilder();
            highlightBuilder.preTags("<span color='red'>");
            highlightBuilder.postTags("</span>");
            highlightBuilder.field("title");
            searchSourceBuilder.sort("price", SortOrder.ASC).from(4).size(2).highlighter(highlightBuilder);
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            //7.解析结果
            SearchHits searchHits = searchResponse.getHits();
            if (null != searchHits) {
                SearchHit[] hits = searchHits.getHits();
                for (SearchHit hit : hits) {
                    String sourceAsString = hit.getSourceAsString();
                    System.out.println("查询结果:" + sourceAsString);
                        /*
                            高亮结果解析
                         */
                    Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                    if (!highlightFields.isEmpty()) {
                        Text title = highlightFields.get("title").getFragments()[0];
                        System.out.println("高亮结果: " + title);
                    }
                }
            }
        }
    
        //封装请求和打印数据
        public void showContext() throws IOException {
            //发送请求
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            //解析结果
            SearchHits searchHits = searchResponse.getHits();
            if (null != searchHits) {
                SearchHit[] hits = searchHits.getHits();
                for (SearchHit hit : hits) {
                    String sourceAsString = hit.getSourceAsString();
                    System.out.println("查询结果:" + sourceAsString);
                }
            }
        }
    
        @AfterEach
        public void close() throws IOException {
            client.close();
        }
    }
  • 相关阅读:
    struts2文件上传下载
    struts2自定义拦截器
    JSP_Servlet 解决中文乱码登录问题
    ajax提交form表单
    sql语句大全
    spring
    struts2
    jsp_servlet
    jsp_servlet2
    数据库
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13857335.html
Copyright © 2011-2022 走看看