EelasticSearch使用

1.导入依赖包

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>cn.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <version>2.0.0-beta1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.14.0</version>
        </dependency>

2.在对像属性上添加注解


@IndexName( aliasName = "es_product")
public class EsProduct {

    @IndexId(type = IdType.CUSTOMIZE)
    private Integer id;
    @IndexField( fieldType= FieldType.TEXT, analyzer = Analyzer.IK_MAX_WORD,searchAnalyzer = Analyzer.IK_MAX_WORD)
    private String name;
    @IndexField( fieldType= FieldType.INTEGER)
    private Integer categoryId;
    @IndexField( fieldType= FieldType.DOUBLE) // 12.56
    private BigDecimal price;
    @IndexField( fieldType= FieldType.TEXT, analyzer = Analyzer.IK_MAX_WORD)
    private String brief;
    @IndexField( fieldType= FieldType.KEYWORD)
    private String img;
    @IndexField( fieldType= FieldType.TEXT, analyzer = Analyzer.IK_MAX_WORD)
    private List<String> tags;
    @IndexField( fieldType= FieldType.INTEGER) //198
    private Integer highOpinion;
    @IndexField( fieldType= FieldType.INTEGER)
    private Integer salesVolume;
    @IndexField( fieldType= FieldType.DATE)
    private LocalDateTime productionDate;
}

3.新建Mapper类,类似Mybatis的dao

import cn.easyes.core.core.BaseEsMapper;

public interface ProductMapper  extends BaseEsMapper<Product> {

}

4.配置ES

# Easy-Es配置部分
easy-es:
  # 启用Easy-Es功能
  enable: true
  # 设置Elasticsearch服务器地址和端口
  address: 192.168.21.100:9200
  # 全局配置项,设置是否打印执行的DSL语句(便于调试)
  global-config:
    print-dsl: true

5.创建、删除、查询索引

参考文档

插入

@Test
    void insert1() {

        EsProduct esProduct = new EsProduct().setId(1)
                .setName("红米手机 苹果")
                .setSubTitle("小米(MI)Redmi K70 至尊版 天玑9300+ IP68 小米龙晶玻璃 12GB+256GB 晴雪白 小米红米K70 Ultra 5G手机")
                .setDescription("天玑 9300+\n" +
                        "MediaTek 迄今最强性能芯\n" +
                        "升级全大核 CPU 架构\n" +
                        "作为小米xMediaTek 联合实验室首款性能力作,RedmiK70 至尊版\n" +
                        "采用了 9300+旗舰芯片,主频高达3.4GHz,配备 Cortex-X4 大核\n" +
                        "架构。无论驾驭重载 3D游戏,还是重载应用,全然毫不费力。即\n" +
                        "便效果拉满,依旧狂暴持久。格力")
                .setPic("https://www.baidu.com")
                .setCategoryId(100)
                .setBrandName("小米")
                .setSaleCount(100)
                .setHighOpinion(105)
                .setPrice(new BigDecimal(1000))
                .setTags(CollUtil.newArrayList("小米", "手机","红米","老人机"));

        Integer rowNum = esProductDao.insert(esProduct);
    }
    @Test
    void insert2() {

        EsProduct esProduct = new EsProduct().setId(2)
                .setName("格力(GREE)KFR-35GW/NhGc1B")
                .setSubTitle("格力(GREE)空调 云佳【超级省电】新能效空调变频冷暖 自清洁 壁挂式空调挂机卧室变频空调冷暖空调冷暖 大1匹 一级能效 【适用10-15㎡】")
                .setDescription("4.50 旧国标一级能效\n" +
                        "APF:\n" +
                        "空调APF能效等级是空调评价指标\n" +
                        "APF数值越高越省电。苹果")
                .setPic("https://www.baidu.com")
                .setCategoryId(100)
                .setBrandName("格力")
                .setSaleCount(50)
                .setHighOpinion(205)
                .setPrice(new BigDecimal(2000))
                .setTags(CollUtil.newArrayList("格力", "夏天","避暑","节能","制冷","省电"));

        Integer rowNum = esProductDao.insert(esProduct);
    }
    @Test
    void insert3() {
         List productList = new ArrayList<EsProduct>();
        for (int i = 1; i <= 13; i++) {
            EsProduct esProduct = new EsProduct().setId(i)
                    .setName("Redmi K70")
                    .setSubTitle("小米(MI)Redmi K70 至尊版 天玑9300+ IP68 小米龙晶玻璃 12GB+256GB 晴雪白 小米红米K70 Ultra 5G手机")
                    .setDescription("天玑 9300+\n" +
                            "MediaTek 迄今最强性能芯\n" +
                            "升级全大核 CPU 架构\n" +
                            "作为小米xMediaTek 联合实验室首款性能力作,RedmiK70 至尊版\n" +
                            "采用了 9300+旗舰芯片,主频高达3.4GHz,配备 Cortex-X4 大核\n" +
                            "架构。无论驾驭重载 3D游戏,还是重载应用,全然毫不费力。即\n" +
                            "便效果拉满,依旧狂暴持久。")
                    .setPic("https://www.baidu.com")
                    .setBrandName("小米")
                    .setSaleCount(100)
                    .setCategoryId(100)
                    .setPrice(new BigDecimal(2599))
                    .setTags(CollUtil.newArrayList("小米", "手机","红米","老人机"))
                    .setProductionDate(LocalDate.now());
            productList.add(esProduct);
        }


        Integer rowNum = esProductDao.insertBatch(productList);
    }

删除

  @Test
    void delete() {
        Integer integer = esProductDao.deleteBatchIds(CollUtil.newArrayList(1, 2, 3, 4, 5));
    }

更新

@Test
    void update() {
        EsProduct esProduct = new EsProduct().setId(1)
                .setName("红米手机 苹果15")
                .setSubTitle("小米(MI)Redmi K70 至尊版 天玑9300+ IP68 小米龙晶玻璃 12GB+256GB 晴雪白 小米红米K70 Ultra 5G手机")
                .setDescription("天玑 9300+\n" +
                        "MediaTek 迄今最强性能芯\n" +
                        "升级全大核 CPU 架构\n" +
                        "作为小米xMediaTek 联合实验室首款性能力作,RedmiK70 至尊版\n" +
                        "采用了 9300+旗舰芯片,主频高达3.4GHz,配备 Cortex-X4 大核\n" +
                        "架构。无论驾驭重载 3D游戏,还是重载应用,全然毫不费力。即\n" +
                        "便效果拉满,依旧狂暴持久。格力")
                .setPic("https://www.baidu.com")
                .setCategoryId(100)
                .setBrandName("小米")
                .setSaleCount(1008)
                .setPrice(new BigDecimal(1000))
                .setTags(CollUtil.newArrayList("小米", "手机","红米","老人机"));
        Integer rowNum = esProductDao.updateById(esProduct);
    }

    @Test
    //部分更改
    void update2() {
        EsProduct esProduct = new EsProduct().setId(1)

                .setSaleCount(1009);

        Integer rowNum = esProductDao.updateById(esProduct);
    }
    @Test
        //部分更改
    void update3() {
        LambdaEsUpdateWrapper<EsProduct> wrapper = new LambdaEsUpdateWrapper<>();
        wrapper.eq(EsProduct::getCategoryId, 100);
        EsProduct document = new EsProduct();
        document.setName("隔壁老王王");
        Integer rowNum = esProductDao.update(document,wrapper);
    }

查询

 @Test
    void select() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(EsProduct::getId, 2); //where id = 2
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);

    }
    @Test
    void select100() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(EsProduct::getCategoryId, 200); //where categoryId = 200
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);

    }
    @Test
    void select101() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.in(EsProduct::getCategoryId, 100,200); //where categoryId in (100,200)
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);

    }
    @Test
    //根据单个字段模糊查询
    void select2() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.match(EsProduct::getName, "格力"); //where name like '%格力%'
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);

    }
    @Test
    //根据所有字段模糊查询
    void select3() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.queryStringQuery("苹果"); //where name like '%苹果%' or subTitle like '%苹果%' ....
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);
    }

    @Test
        //根据所有字段模糊查询
    void select4() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.in(EsProduct::getCategoryId, 100); //where categoryId in (100) and (name like '%苹果%' or subTitle like '%苹果%' or description like '%苹果%')
        wrapper.and(
                 w->w.match(EsProduct::getName, "小日本极小米粒",2.0F)
                         .or().match(EsProduct::getSubTitle, "小日本极小米粒",1.0F)
                         .or().match(EsProduct::getDescription, "小日本极小米粒",5.5F)
                );
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);
    }
    @Test
     //排序
    void select5() {
        delete();
        insert1();
        insert2();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.in(EsProduct::getCategoryId, 100); //where categoryId in (100) and (name like '%苹果%' or subTitle like '%苹果%' or description like '%苹果%')
        wrapper.orderByDesc(EsProduct::getSaleCount);
        List<EsProduct> esProducts = esProductDao.selectList(wrapper);
    }
    @Test
        //分页
    void select6() {
        delete();
        insert3();
        LambdaEsQueryWrapper<EsProduct> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.in(EsProduct::getCategoryId, 100); //where categoryId in (100) and (name like '%苹果%' or subTitle like '%苹果%' or description like '%苹果%')
        wrapper.orderByDesc(EsProduct::getSaleCount);
        EsPageInfo<EsProduct> esProductEsPageInfo = esProductDao.pageQuery(wrapper, 3, 5);

    }

7.关键字高亮

在这里插入图片描述

8. 原生Api调用

8.1查看索引mapping关系

GET /es_product/_mapping

8.2查看某个文档,具体字段的分词

GET /product/_doc/2/_termvectors?fields=brief

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值