• 测试使用索引库crud和高级查询分页


    1.搭建ES的服务
    • 导入依赖

       <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
      </dependency>
    • 配置ES

      ...
      spring:
        application:
          name: hrm-es-service
        data:
          elasticsearch:
            cluster-name: elasticsearch
            cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
            ... 
    2.创建EmployeeDoc
    /**
     * 针对于  Employee 表的文档映射
     * indexName:索引库
     * type:类型(表类型)
     */
    @Document(indexName = "hrm" , type = "employee")
    public class EmployeeDoc {
    ​
        //对应文档的id
        @Id
        private Long id;
    ​
        @Field(type = FieldType.Keyword)    //指定为 不分词
        private String userName;
    ​
        private int age;
    ​
        @Field(type =FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
        private String intr;
        ...
    3.创建索引库
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = EsServiceApplication2050.class)
    public class ESTest {
    ​
        @Autowired
        private ElasticsearchTemplate elasticsearchTemplate;
    ​
        @Test
        public void testCreateIndex() {
            //创建索引
            elasticsearchTemplate.createIndex(EmployeeDoc.class);
            //做文档映射
            elasticsearchTemplate.putMapping(EmployeeDoc.class);
        }
    }
    4.定义ElasticsearchRepository
    @Repository
    public interface EmployeeElasticsearchRepository  extends ElasticsearchRepository<EmployeeDoc,Long> {}
    5.基本CRUD
    @Autowired
        private EmployeeElasticsearchRepository employeeElasticsearchRepository;
    ​
        //初始化
        @Test
        public void testCreateIndex() {
            //创建索引
            elasticsearchTemplate.createIndex(EmployeeDoc.class);
            //做文档映射
            elasticsearchTemplate.putMapping(EmployeeDoc.class);
        }
        //添加数据
        @Test
        public void testAdd(){
    ​
            //准备数据
            EmployeeDoc employeeDoc = new EmployeeDoc();
            employeeDoc.setAge(18);
            employeeDoc.setUserName("王大锤");
            employeeDoc.setIntr("我爱中国");
    ​
            //添加数据到es
            employeeElasticsearchRepository.save(employeeDoc);
        }
    ​
        //添加数据
        @Test
        public void testUpdate(){
    ​
            //准备数据
            EmployeeDoc employeeDoc = new EmployeeDoc();
            employeeDoc.setId(5L);  //有id就是修改
            employeeDoc.setAge(18);
            employeeDoc.setUserName("周伯通");
            employeeDoc.setIntr("深得童子通真传");
    ​
            //添加数据到es
            employeeElasticsearchRepository.save(employeeDoc);
        }
        //删除数据
        @Test
        public void testDelete(){
            employeeElasticsearchRepository.deleteById(5L);
        }
        //获取数据
        @Test
        public void testGet(){
            Optional<EmployeeDoc> optional = employeeElasticsearchRepository.findById(5L);
            System.out.println(optional.get());
        }
    6.高级查询分页
        
    //通过索引库,高级查询和分页
        /**
         * 用户名为  隔壁老王
         * age在 10 - 20
         * 按照 id排序降序
         * 分页 每页 2条 取第一页
         */
        @Test
        public void testSearchAndPage() throws Exception{
            //1.创建查询建造器对象
            NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
    ​
            //2.给查询建造器添加查询条件对象
                //1.创建组合查询条件对象
            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
                //2.添加查询条件:分词查询:username
            List<QueryBuilder> must= boolQuery.must();
            must.add(QueryBuilders.matchQuery("username","周伯通" ));
                //2.添加查询条件:范围查询:age:10到30
            List<QueryBuilder> filter = boolQuery.filter();
            filter.add(QueryBuilders.rangeQuery("age").lte(30).gte(10));
                //3.给查询建造器添加查询条件对象
            queryBuilder.withQuery(boolQuery);
    ​
            //3.给查询建造器添加分页对象:从第0页开始,每页2条
            queryBuilder.withPageable(PageRequest.of(0,2 ));
    ​
            //4.给查询建造器添加排序
                //1.创建排序对象:id,降序
            FieldSortBuilder sortBuilder = new FieldSortBuilder("id").order(SortOrder.DESC);
                //2.给查询建造器添加排序
            queryBuilder.withSort(sortBuilder);
    ​
            //5.创建查询对象
            NativeSearchQuery searchQuery = queryBuilder.build();
    ​
            //6.传给search方法,执行高级查询分页排序功能,得到分页对象
            Page<EmployeeDoc> page = employeeElasticsearchRepository.search(searchQuery);
    ​
            //7.获取结果
                //获得总条数
            int totalPages = page.getTotalPages();
            System.out.println(totalPages);
                //获得当前页数据
            Iterator<EmployeeDoc> iterator = page.getContent().iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
     
  • 相关阅读:
    vue 集成 vis-network 实现网络拓扑图
    三维空间旋转和Three.JS中的实现
    es6常用新属性(详细整理版)
    css的top和left属性不起作用
    网易云音乐歌单生成外链播放器
    Webstorm常用快捷键备忘
    CPU
    中标麒麟neokylin信息查看
    split分割(拆分)文件
    centos7 安装wps
  • 原文地址:https://www.cnblogs.com/htq29study/p/11617266.html
Copyright © 2020-2023  润新知