it编程 > 前端脚本 > Bootstrap

EelasticSearch使用!!!

316人参与 2024-07-31 Bootstrap

1. easy-es介绍

easy-es傻瓜级elasticsearch搜索引擎orm框架icon-default.png?t=n7t8https://www.easy-es.cn/

2. 导入依赖包

<dependencies>
        <!--easy-es-boot-starter -->
        <dependency>
            <groupid>cn.easy-es</groupid>
            <artifactid>easy-es-boot-starter</artifactid>
            <version>2.0.0-beta1</version>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
            <!--排除springboot中自带的es依赖-->
            <exclusions>
                <exclusion>
                    <groupid>org.elasticsearch.client</groupid>
                    <artifactid>elasticsearch-rest-high-level-client</artifactid>
                </exclusion>
                <exclusion>
                    <groupid>org.elasticsearch.client</groupid>
                    <artifactid>elasticsearch-rest-client</artifactid>
                </exclusion>
                <exclusion>
                    <groupid>org.elasticsearch</groupid>
                    <artifactid>elasticsearch</artifactid>
                </exclusion>
            </exclusions>
        </dependency>
        <!--es-->
        <dependency>
            <groupid>org.elasticsearch.client</groupid>
            <artifactid>elasticsearch-rest-high-level-client</artifactid>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch.client</groupid>
            <artifactid>elasticsearch-rest-client</artifactid>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupid>org.elasticsearch</groupid>
            <artifactid>elasticsearch</artifactid>
            <version>7.14.0</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
            <optional>true</optional>
        </dependency>
        <!--hutool-->
        <dependency>
            <groupid>cn.hutool</groupid>
            <artifactid>hutool-all</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

注解 | easy-es傻瓜级elasticsearch搜索引擎orm框架icon-default.png?t=n7t8https://www.easy-es.cn/pages/v1.x/4eb7db/#esmapperscan

@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;
}

4.新建mapper类,类似mybatis的dao

import cn.easyes.core.core.baseesmapper;

public interface productmapper  extends baseesmapper<product> {
}

5.配置es

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

5.启动类上加上该注解,去扫描es的mapper接口@esmapperscan(value = "com.beimao.dao")

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

 @test
    void insert() {
        esproduct esproduct = esproduct.builder()
                .id(1)
                .name("小米")
                .img("图片地址")
                .brief("小米(mi)redmi note12 5g 120hz oled屏幕 骁龙4移动平台 5000mah长续航 8gb+128gb子夜黑 小米红米")
                .price(new bigdecimal(18))
                .categoryid(1)
                .highopinion(20)
                .productiondate(localdatetime.now())
                .salesvolume(99)
                .tags(collutil.newarraylist("120高刷","舒适护眼"))
                .build();
        esmapper.insert(esproduct);
    }
    @test
    void insert2() {
        delete();
        list<esproduct> esproducts = collutil.newarraylist();
        for (int i = 1; i <= 10; i++) {
            esproduct esproduct = esproduct.builder()
                    .id(i)
                    .name("小米"+i)
                    .img("图片地址"+i)
                    .brief("小米(mi)redmi note"+i+" 5g 120hz oled屏幕 骁龙4移动平台 5000mah长续航 8gb+128gb子夜黑 小米红米")
                    .price(new bigdecimal(500.36+i))
                    .categoryid(1)
                    .highopinion(100+i)
                    .productiondate(localdatetime.now())
                    .salesvolume(200+i)
                    .tags(collutil.newarraylist("12"+i+"高刷","舒适护眼"))
                    .build();
            esproducts.add(esproduct);
                }

        esmapper.insertbatch(esproducts);
    }

    @test
    void update() {
        esproduct esproduct = esproduct.builder()
                .id(1)
                .name("su7")
                .img("图片地址")
                .brief("小米汽车")
                .price(new bigdecimal(18))
                .categoryid(9)
                .highopinion(20)
                .productiondate(localdatetime.now())
                .salesvolume(99)
                .tags(collutil.newarraylist("120高刷","舒适护眼"))
                .build();
        integer integer = esmapper.updatebyid(esproduct);
    }
    @test
    void delete() {
        integer batchids = esmapper.deletebatchids(collutil.newarraylist(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
    }

    @test
    void select() {
        lambdaesquerywrapper  querywrapper = new lambdaesquerywrapper<esproduct>();
        querywrapper.eq("id",1);
        list list = esmapper.selectlist(querywrapper);
    }
    @test
    void select2() {
        lambdaesquerywrapper  querywrapper = new lambdaesquerywrapper<esproduct>();
        querywrapper.querystringquery("汽车之家"); //所有字段都去匹配
        list list = esmapper.selectlist(querywrapper);
    }
    @test
    void select3() {
        lambdaesquerywrapper  querywrapper = new lambdaesquerywrapper<esproduct>();
        querywrapper.eq("categoryid",1);
        list list = esmapper.selectlist(querywrapper);
    }
    @test
    void select4() {
        lambdaesquerywrapper<esproduct>  querywrapper = new lambdaesquerywrapper<>();
        querywrapper.in(esproduct::getcategoryid,1,9);
      
        list list = esmapper.selectlist(querywrapper);
    }

    @test
    void select5() {
        lambdaesquerywrapper<esproduct>  querywrapper = new lambdaesquerywrapper<>();
        //querywrapper.match(esproduct::getbrief,"汽车",1.0f);
        //querywrapper.match(esproduct::getname,"汽车",1.0f);
        //querywrapper.multimatchquery("汽车", operator.or, esproduct::getname,esproduct::getbrief);
        querywrapper.in("categoryid",1,9); //where categroyid in (1,9) and ( name like '%汽车%' or brief like '%汽车%')
        querywrapper.and(
                w->w.match(esproduct::getbrief,"汽车",1.0f)
                        .or().match(esproduct::getname,"汽车",2.0f));
        list list = esmapper.selectlist(querywrapper);
        string dsl = esmapper.getsource(querywrapper);
        system.out.println(dsl);
    }
    @test
    void select6() {
        lambdaesquerywrapper<esproduct>  querywrapper = new lambdaesquerywrapper<>();

        querywrapper.in("categoryid",1,9); //where categroyid in (1,9) and ( name like '%汽车%' or brief like '%汽车%')
        querywrapper.and(
                w->w.match(esproduct::getbrief,"高刷",1.0f)
                        .or().match(esproduct::getname,"高刷",2.0f)
                        .or().match(esproduct::gettags,"高刷",1.0f));
        querywrapper.orderbydesc(esproduct::getsalesvolume);
        espageinfo<esproduct> esproductespageinfo = esmapper.pagequery(querywrapper, 2, 3);

        string dsl = esmapper.getsource(querywrapper);
        system.out.println(dsl);
    }

    @test
    void select7() {
        lambdaesquerywrapper<esproduct>  querywrapper = new lambdaesquerywrapper<>();


        querywrapper.match(esproduct::getname,"水汽车门");
        list<esproduct> esproducts = esmapper.selectlist(querywrapper);


    }

7. 原生api调用

7.1查看索引mapping关系

get /es_product/_mapping

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

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

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

elasticsearch7.14.0遇到问题ERROR: [3] bootstrap checks failed. You must address the points descri

07-31

k8s部署 多master节点负载均衡以及集群高可用

07-31

docker-desktop闪退出现wsl问题解决方法

08-01

【大数据Hadoop】HDFS-Namenode-bootstrapStandby同步元数据的源码步骤分析

08-06

offset Explorer连接kafka 一直报错unable to determine broker endpoints from zookeeper.one or more broker

08-06

【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论