IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot如何整合elasticsearch8.2.0 -> 正文阅读

[Java知识库]springboot如何整合elasticsearch8.2.0

springboot整合elasticsearch8.2.0

一、application.yml或者其他的配置文件皆可

两种方式:【1】

elasticsearch:
  hosts: 127.0.0.1:9200     # 如果有多个IP就自己加逗号吧

【2】

spring:
	elasticsearch:
    	uris: localhost:9200   #这样子自动配置了

二、config类

不同的版本会有不同的config类要求,这里只提供es8.2.0的,对应着上面两种application文件,此处也提供两种对应的config类,至于之后和springboot整合就不会出现分类了。

【1】自定义属性
/**
 * @Author Caosen
 * @Date 2022/9/22 10:34
 * @Version 1.0
 */
@Configuration
public class EsUtilConfigClint2 {

    @Value("elasticsearch.hosts")
    private String hosts;

    private HttpHost[] getHttpHost(){
        if (hosts.length() > 0){
            System.out.println(hosts);

        }
        else {
            throw new RuntimeException("invalid");
        }
        String[] hosts_array = hosts.split(",");
        //用string类型创建host的集合

        HttpHost[] httpHosts = new HttpHost[hosts_array.length];

        int i = 0;
        for (String s : hosts_array) {
            //这里解析端口
            String[] hosts_array_in = s.split(":");
            //到这里就有了id和端口两个东西
            HttpHost http = new HttpHost(hosts_array_in[0], Integer.parseInt(hosts_array_in[1]), "http");
            httpHosts[i++] = http;

        }
        System.out.println("目前的配置加入了" + i + "个id及其端口");
        return httpHosts;
    }

    /**
     * 客户端
     * @return
     * @throws IOException
     */
    @Bean
    public ElasticsearchClient configClint() throws IOException {
        // Create the low-level client
        HttpHost[] httpHosts = getHttpHost();
        RestClient restClient = RestClient.builder(httpHosts).build();

        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());

        // 客户端
        ElasticsearchClient client = new ElasticsearchClient(transport);

        return client;
    }
}

【2】使用自带的属性

/**
 * @Author Caosen
 * @Date 2022/9/18 15:01
 * @Version 1.0
 */
@Configuration
public class EsUtilConfigClint {
    /**
     * 客户端
     * @return
     * @throws IOException
     */
    public ElasticsearchClient configClint() throws IOException {
        // Create the low-level client
        RestClient restClient = RestClient.builder(
                new HttpHost("127.0.0.1", 9200)).build();

        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());

        // 客户端
        ElasticsearchClient client = new ElasticsearchClient(transport);

        return client;
    }

}

三、测试

【1】service接口

由于作者是直接在项目里面加内容的,可能会出现一些不相关的东西,我尽量截取相关代码

/**
     * 从数据库中导入所有商品到ES
     */
    int importAll();

    /**
     * 新建指定名称的索引
     * @param name
     * @throws IOException
     */
    void addIndex(String name) throws IOException;

    /**
     * 检查指定名称的索引是否存在
     * @param name
     * @return
     * @throws IOException
     */
    boolean indexExists(String name) throws IOException;

    /**
     * 删除指定索引
     * @param name
     * @throws IOException
     */
    void delIndex(String name) throws IOException;

    /**
     * 创建索引,指定setting和mapping
     * @param name 索引名称
     * @param settingFn 索引参数
     * @param mappingFn 索引结构
     * @throws IOException
     */
    void create(String name,
                Function<IndexSettings.Builder, ObjectBuilder<IndexSettings>> settingFn,
                Function<TypeMapping.Builder, ObjectBuilder<TypeMapping>> mappingFn) throws IOException;




【2】serviceImpl,主要看create ,add,exsits, delete
@Autowired
    private EsProductDao esProductDao;

    @Autowired
    private EsProductRepository esProductRepository;

    @Autowired
    private ElasticsearchClient elasticsearchClient;

    @Override
    public int importAll() {
        List<EsProduct> allEsProductList = esProductDao.getAllEsProductList(null);
        Iterable<EsProduct> esProducts = esProductRepository.saveAll(allEsProductList);
        Iterator<EsProduct> iterator = esProducts.iterator();
        int result = 0;
        while (iterator.hasNext()) {
            result++;
            iterator.next();
        }
        return result;
    }

    @Override
    public void addIndex(String name) throws IOException {
        elasticsearchClient.indices().create(b -> b.index(name));

    }

    @Override
    public boolean indexExists(String name) throws IOException {
        return elasticsearchClient.indices().exists(b -> b.index(name)).value();
    }

    @Override
    public void delIndex(String name) throws IOException {
        elasticsearchClient.indices().delete(b -> b.index(name));
    }

    @Override
    public void create(String name, Function<IndexSettings.Builder, ObjectBuilder<IndexSettings>> setting, Function<TypeMapping.Builder, ObjectBuilder<TypeMapping>> mapping) throws IOException {
        elasticsearchClient.indices()
                .create(b -> b
                        .index(name)
                        .settings(setting)
                        .mappings(mapping));
    }
【3】测试

测试可以用controller 或者 用test伪装controller,自己测试的时候还是用postman接口比较合适。这里测试两种创建index,一种简单,一种稍微复杂,结果都是通过,见图。其他的删除啊,导入数据库的数据(repository)都是可以查到的。

@Test
    void addIndexSimple() throws IOException {
        String s = "simple";

        esProductService.addIndex(s);
        System.out.println("创建success");
    }
    @Test
    void addIndexComplicated() throws IOException {

        String s = "complicated";
        Function<IndexSettings.Builder, ObjectBuilder<IndexSettings>> setting = builder -> builder
                .index(i -> i.numberOfShards("3").numberOfReplicas("1"));
        Property keywordproperty = Property.of(p -> p.keyword(k -> k.ignoreAbove(256)));
        Property testproperty = Property.of(p -> p.text(builder -> builder));
        Property integerproperty = Property.of(builder -> builder.integer(i -> i));

        Function<TypeMapping.Builder, ObjectBuilder<TypeMapping>> mapping = builder -> builder
                .properties("name", keywordproperty)
                .properties("description", testproperty)
                .properties("price", integerproperty);
        esProductService.create(s, setting, mapping);

    }

ilder -> builder
.properties(“name”, keywordproperty)
.properties(“description”, testproperty)
.properties(“price”, integerproperty);
esProductService.create(s, setting, mapping);

}
![在这里插入图片描述](https://img-blog.csdnimg.cn/c442d8d65096466389acb07dd7ab447b.png)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:42:44  更:2022-09-24 20:44:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:31:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码