elasticsearch整合springboot(一)

1. 配置文件

1.1 加入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

在这里,我所加的依赖对应的es版本是6.4.3, 所以用es 6.4.3作为学习的版本。(或者,如果用的是其他版本的es,可以改依赖为相对应的版本)

1.2 配置yml文件

当我们用java对接es时,客户端使用的端口号是9300,如果是es集群,可以在cluster-nodes后加ip,用英文逗号隔开

spring:
  data:
    elasticsearch:
      cluster-nodes: 192.168.1.34:9300
      cluster-name: imooc-elasticsearch

1.3 第一次启动项目

mvn install之后,启动

报错如下:

这是因为我们的项目依赖在foodie-dev这个项目下,foodie-dev有database url配置,所以这里也要加上 database 的配置:

spring:
  datasource:                                 # 数据源的相关配置
    type: com.zaxxer.hikari.HikariDataSource # 数据源类型:HikariCP
    driver-class-name: com.mysql.jdbc.Driver # mysql驱动
    url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect
    username: root
    password: 123456
  data:
    elasticsearch:
      cluster-nodes: 192.168.1.34:9300
      cluster-name: imooc-elasticsearch

1.4 第二次启动项目

报错如下:

解决方法:

加上配置:

es.set.netty.runtime.available.processors=false

具体做法是创建类ESConfig 

import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

@Configuration
public class ESConfig {
    /**
     * 解决netty引起的issue
     */
    @PostConstruct
    void init() {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
    }
}

 再次启动,启动成功

 2. 创建索引

2.1 创建实体类

package com.imooc.es.pojo;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;

@Document(indexName = "stu",type = "_doc")    //如果是es7.x 就不用写type,es7.x没有type
public class Stu {

    @Id    //加上@Id  就会帮我们创建一个和文档数据里的id一样的记录id
    private Long stuId;

    @Field(store = true)    //store:存储  默认是false    index:倒排索引  默认是true
    private String name;

    @Field(store = true)
    private Integer age;

    public Long getStuId() {
        return stuId;
    }

    public void setStuId(Long stuId) {
        this.stuId = stuId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2.2 创建索引

 代码如下:

package com.test;

import com.imooc.Application;
import com.imooc.es.pojo.Stu;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ESTest {

    @Autowired
    private ElasticsearchTemplate esTemplate;

    @Test
    public void createIndexStu(){

        Stu stu = new Stu();
        stu.setStuId(1001L);
        stu.setName("bat man");
        stu.setAge(18);

        IndexQuery indexQuery = new IndexQueryBuilder().withObject(stu).build();

        //index:创建索引,并添加数据
        esTemplate.index(indexQuery);
    }
}

2.3 启动报错:

 解决方法:

(1)添加依赖

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>

(2)在resource文件夹下添加log4j.properties文件,文件配置内容如下:

log4j.rootLogger=DEBUG,stdout,file
log4j.additivity.org.apache=true

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %c{1}:%L - %m%n

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Threshold=INFO
log4j.appender.file.append=true
log4j.appender.file.File=/workspaces/logs/foodie-search/imooc.log

2.4 再次启动,启动正常,索引创建成功,数据添加成功

2.4.1 索引创建成功

为什么会是5个分片,每个分片对应一个副本呢?

查看@Document源码,发现,默认设置shards为5,replicas为1

 2.4.2 数据添加成功

 2.4.3 @Id 注解作用测试

在创建文档时,我们给stuId加上注解@Id

    @Id    //加上@Id  就会帮我们创建一个和文档数据里的id一样的记录id
    private Long stuId;

此时,我们不加@Id,再来运行,并且我们也是第二次来运行ESTest 里的代码,也就是第二次运行 esTemplate.index(indexQuery);

index方法:当第一次已经创建索引了,之后再运行该方法,便不会再次创建索引,会增加第二次加的新数据。

可以看出,不加@Id注解,就会自动生成_id;加@Id注解的,会生成和此属性一样的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@所谓伊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值