Es结合springboot(笔记回忆)

news2024/11/18 13:37:27

导包

<!--导入es-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

配置

  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 127.0.0.1:9300

9200,可以查看es信息

9300 内部用

9300是TCP协议端口号,ES集群之间通讯端口号

9200端口号,暴露ES RESTful接口端口号

searchAnalyzer 查的时候分词器
analyzer  存入的时候分词器

GET _cat/indices 相当于查询所有库

导入工具类



import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.UnknownHostException;
@Component
public class ESClientUtil {

    public  TransportClient getClient(){
        TransportClient client = null;
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch").build();
        try {
            client = new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return client;
    }

}

创建实现增删改查的ES工厂,这个接口估计是模仿mybatis那个mapper,东施效颦罢了。

package org.example.utils;

import org.example.domain.EmpDoc;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

//要穿一个类,然后文档对象id的类型,我们需要自己写一个接口类,并在接口类上打一个注解,注入到spring容器

/**
 * 这个Repository 类似与mybatis中的mapper接口
 * 这个接口不需要实现类,我们到时候如果想对文档crud,只需要注入这个接口类就可以了。
 * 反正就是动态代理嘛,自动生成动态代理类,自动将代理实现类交给spring管理,所以我们注入这个接口类
 * 就可以使用这个接口类的方法,实现文档的crud
 */
@Repository
public interface UserDocRepository extends ElasticsearchRepository<EmpDoc,Long> {

}

我们创建索引库的话,可以通过注解实体类来创建es库

package org.example.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Data
@AllArgsConstructor
@NoArgsConstructor
//这里指明了
@Document(indexName = "test",type = "emp")
public class EmpDoc{
    @Id //文档id字段
    private Long id;
    @Field(type = FieldType.Keyword) //不分词
    private String name;
    @Field(type = FieldType.Integer)
    private Integer age;
    @Field(type = FieldType.Text,analyzer = "ik_smart"
            ,searchAnalyzer = "ik_smart")
    private String intro;
}


@Document(indexName = "test",type = "emp")

指明了在es中的位置和地址,text分词查询,keyword不分词哈。

开始操作

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

创建索引库

    @Test
    public void test05(){
//        boolean index = elasticsearchTemplate.createIndex("spring-demo");
//        System.out.println(index);
        elasticsearchTemplate.createIndex(EmpDoc.class);
        elasticsearchTemplate.putMapping(EmpDoc.class);

    }
    @Test
    public void test06(){
        EmpDoc empDoc = new EmpDoc();
        empDoc.setAge(12);
        empDoc.setIntro("zzzz");
        empDoc.setId(1l);
        empDoc.setName("zs");
        userDocRepository.save(empDoc);
    }
    @Test
    public void test07(){
        System.out.println(userDocRepository.findById(1l).get());
    }

其余操作就很简单了,简单的增删改查没意思,直接快进到聚合查询,我就是为了回忆聚合查询,才开始又慢慢看es的

    @Test
    public void test08(){
//        创建一个查询构建器对象
        NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
//        Page<EmpDoc> search = userDocRepository.search(builder.build());
        NativeSearchQuery build = builder.build();
        Page<EmpDoc> search = userDocRepository.search(build);
//        添加查询条件,添加排序条件,添加分页条件,将es的分页对象转换为自己的对象
        PageList<EmpDoc> empDocPageList = new PageList<>(search.getTotalElements(), search.getContent());
        System.out.println(empDocPageList);

    }

build去拿searquery对象,为什么要去拿searchquery对象呢?因为search方法要searchquery,才会返回值。

然后这个返回的值里面有很多方法,就可以拿到totals啥的。

分页

queryBuilder.withPageable(PageRequest.of(0,10));

对了,这个方法要的是接口,所以我们要找接口的实现类。是这个方法是要接口吗,我有点记不清了。

成功哈

关键字查询,范围查询,条件查询

我们要先搞清楚

query -> bool -> must(match)/filter(term/range)的顺序

然后

queryBuilder.withQuery(boolQuery);

这个方法可以放入一个boolQuery,这个boolQuery我们可以弄很多的聚合查询在其中

bool中有must关键查询和filter范围查询和过滤查询

must 多个属性都可以关键字查询

mutiMatchQuery 匹配多个字段,多字段分词查询

must——》match关键字查询

filter-》term 是条件查询

filter-》range是范围查询

反正一切都在代码中了哈

  @Test
    public void test08(){
//        创建一个查询构建器对象
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
//        Page<EmpDoc> search = userDocRepository.search(builder.build());
//条件查询
        FieldSortBuilder age = SortBuilders.fieldSort("age").order(SortOrder.DESC);
        queryBuilder.withSort(age);
//        分页查询
        queryBuilder.withPageable(PageRequest.of(0,10));
//        关键字,分词查询还是不分词查询,是分词查询,包含关键字会查询出来。
//        dsl结构,要记得住,不然理解不到
//        query -> bool -> must(match)/filter(term/range)
//        mutiMatchQuery 多字段
//        直接先到bool层
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        List<QueryBuilder> must = boolQuery.must();
//        must.add(QueryBuilders.matchQuery("age","15"));
//        queryBuilder.withQuery()
        List<QueryBuilder> filter = boolQuery.filter();
//        filter.add(QueryBuilders.termQuery("id",3));
// 词元查询
//        年龄
        filter.add(QueryBuilders.rangeQuery("age").gte(15).lte(20));
        queryBuilder.withQuery(boolQuery);
        NativeSearchQuery build = queryBuilder.build();
        Page<EmpDoc> search = userDocRepository.search(build);
//        添加查询条件,添加排序条件,添加分页条件,将es的分页对象转换为自己的对象

        PageList<EmpDoc> empDocPageList = new PageList<>(search.getTotalElements(), search.getContent());
        System.out.println(empDocPageList);

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端vue项目升级nodejs后无法运行了

问题描述&#xff1a; 运行、打包都正常的vue项目&#xff0c;在将nodejs升级到v20.14.0后&#xff0c;均报错了&#xff1a; Error: error:0308010C:digital envelope routines::unsupported opensslErrorStack: [ error:03000086:digital envelope routines::initializ…

Centos下rpm和yum执行卡住问题(已解决)

问题描述 执行rpm和yum卡住&#xff0c; 没有任何报错信息&#xff0c;且无法 ctrl c 终止&#xff0c;只能通过后台 kill -9 杀死。 问题排查&#xff1a; 查看yum日志&#xff1a;yum -vv 软件包 会发现卡在 loading keyring from rpmdb&#xff0c;即load DB存在问题。 …

Java - 程序员面试笔记记录 实现 - Part2

2.1 输入输出流 流可以被看作一组有序的字节集合&#xff0c;即数据在两个设备间的传输。 字节流&#xff1a;以字节作为单位&#xff0c;读到一个字节就返回一个字节&#xff1b;InputStream & OutputStream。 字符流&#xff1a;使用字节流读到一个到多个字节先查询码…

【技巧】ArcGIS Pro设置自动保存数据编辑内容

一、工程文件自动保存 ArcGIS Pro软件的工程也可以自动保存备份。默认备份时间是5分钟&#xff0c;您可以在【工程】→【选项】→【常规】→【工程恢复】中调整自动备份时间。 二、数据编辑自动保存 操作方法&#xff1a;【工程】→【选项】→【编辑】→【会话】&#xff0c;勾…

安卓app开发-基础-本地环境安装android studio且配置参数

安卓app开发-基础-本地环境安装android studio且配置参数&#xff01;今天为大家介绍一下&#xff0c;如何在自己本地电脑安装android ,studio和启动一个简单的java版本的项目。 第一步&#xff0c;去下面的地址&#xff0c;下载一个安装文件。 地址&#xff1a;AndroidDevToo…

Stable Diffusion 商业变现与绘画大模型多场景实战

前言 ai绘画软件Stable Diffusion是一种通过模拟扩散过程&#xff0c;将噪声图像转化为目标图像的文生图模型&#xff0c;具有较强的稳定性和可控性&#xff0c;可以将文本信息自动转换成高质量、高分辨率且视觉效果良好、多样化的图像。在日常工作中&#xff0c;ai绘画软件St…

(3)Java 8 实战第二版——使用流和Lambda进行高效编程

集合工厂 List<String> friends Arrays.asList("Raphael", "Olivia"); friends.set(0, "Richard"); friends.add("Thibaut"); ←---- 抛出一个UnsupportedModificationException异常通过工厂方法创建的Collection的底层…

加载数据到mysql并解决原始数据乱码问题

查看linux上数据&#xff1a; 使用命令转换编码&#xff1a; iconv -f GBK -t UTF-8 toutiao.csv -o toutiao2.csv加载数据到mysql: load data local infile /root/toutiao2.csv INTO TABLE pdz FIELDS TERMINATED BY , LINES TERMINATED BY \r\n;

中霖教育怎么样?税务师通过率高吗?

中霖教育怎么样?税务师通过率高吗? 我们在税务师考试培训方面有着不错的成绩&#xff0c;这都是老师与学员共同努力的结果。 采用小班教学模式&#xff0c;确保每位学员都能得到足够的关注和指导&#xff0c;在学习过程中针对学员的薄弱环节进行专项突破。 因为大部分学员…

《昇思25天学习打卡营第4天|数据集 Dataset》

文章目录 前言&#xff1a;今日所学&#xff1a;1. 数据集加载2. 数据集迭代3. 数据集常用操作与自定义数据集 前言&#xff1a; 今天学习的是数据集的内容。首先&#xff0c;数据是深度学习的基石&#xff0c;高质量的数据输入能够在整个深度神经网络中发挥积极作用。MindSpo…

ATA-7015铁电仪高压放大器的作用是什么

铁电仪高压放大器是科学实验和工业应用中的一种重要设备&#xff0c;主要用于放大铁电仪测量中产生的微弱信号。铁电仪是一种用于测量材料电介质中铁电性质的仪器&#xff0c;其工作原理基于材料在电场中表现出的电极化现象。高压放大器在铁电仪中的作用是将由被测材料产生的微…

Golang-slice理解

slice golang-slice语雀笔记整理 slicego为何设计slice&#xff1f;引用传递实现扩容机制 go为何设计slice&#xff1f; 切片对标其他语言的动态数组&#xff0c;底层通过数组实现&#xff0c;可以说是对数组的抽象&#xff0c;底层的内存是连续分配的所以效率高&#xff0c;可…

qt结合vs2022安装

进入清华大学开源软件&#xff1a; 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成后&#xff0c;双击进行安装&#xff1a; 进入邮箱进行验证&#xff1a; 可能是因为网络问题&#xff0c;无法安装。 重新安装5.12.12版本。 安装后启动失败&#xff0c;重新…

tauri使用github action实现跨平台编译并解决编译错误,mac已损坏,无法打开,你应该将它移到废纸篓解决办法

正常编译为跨平台结果就像上面的&#xff0c;有mac/windows/linux的安装程序&#xff0c;直接下载就可以安装使用&#xff0c;我的这个livebox桌面端仓库地址&#xff1a;GitHub - Sjj1024/LiveBox: livebox&#xff0c;里面有编译文件可以参考。今天主要讲一下遇到的问题。 官…

【FFmpeg】av_write_frame函数

目录 1.av_write_frame1.1 写入pkt&#xff08;write_packets_common&#xff09;1.1.1 检查pkt的信息&#xff08;check_packet&#xff09;1.1.2 准备输入的pkt&#xff08;prepare_input_packet&#xff09;1.1.3 检查码流&#xff08;check_bitstream&#xff09;1.1.4 写入…

C++知识点总结全系列 (05):IO 类的详细总结和分析

1、基类 istream 和 ostream (1)istream A.What 输入流的抽象类&#xff0c;是所有输入流类的基类 B.Why&#xff08;输入流的作用&#xff09; 用于从数据源&#xff08;如文件、标准输入设备等&#xff09;读取数据 (2)ostream A.What 输出流的抽象类&#xff0c;是所有输…

重温react-09(高阶组件的使用方式和注意事项)

高阶组件 可以理解为vue的混入吧&#xff0c;但是没有那个方便&#xff08;个人见解&#xff09; 挂载的全局App.jsx的代码 import React from react; import LearnFunction05 from ./LearnFunction05; // 这个是高阶函数的用法 export default function boxReact() {retur…

六西格玛绿带培训的证书有什么用处?

近年来&#xff0c;六西格玛作为一套严谨而系统的质量管理方法&#xff0c;被广泛运用于各行各业。而六西格玛绿带培训证书&#xff0c;作为这一方法论中基础且重要的认证&#xff0c;对于个人和企业而言&#xff0c;都具有不可忽视的价值。本文将从多个角度深入探讨六西格玛绿…

你敢相信吗,AI绘画正在逐渐取代你的工作!

前言 在当今信息技术高速发展的时代&#xff0c;AI绘画技术的崛起已引起了广泛关注和讨论。许多人开始担心AI技术是否会逐渐取代传统绘画师的工作。人类无疑是感性的动物&#xff0c;创作出来的艺术作品常常带有浓郁的个人风格和情感。但AI绘画在某些方面的突破&#xff0c;使…

浅谈定时器之泊松随机定时器

浅谈定时器之泊松随机定时器 “泊松随机定时器”(Poisson Random Timer)&#xff0c;它允许你基于泊松分布来随机化请求之间的延迟时间&#xff0c;这对于模拟具有随机到达率的事件特别有用&#xff0c;如用户访问网站或服务的请求。 泊松分布简介 泊松分布是一种统计与概率…