SpringBoot整合ElasticSearch

389 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

近期在工作中需要使用es进行简单的全文检索,所以最近都在边学边做笔记,也会把自己遇到的bug以及如何解决的,一并记录在这里,供大家学习参考。

SpringBoot整合ElasticSearch

1、创建工程

企业微信截图_16522368414080.png

企业微信截图_16522369231181.png

企业微信截图_1652237000178.png

企业微信截图_16522370481228.png

点击next即可新建成功!!!

2、导入依赖

依赖版本和安装的版本一致

<!-- elasticsearch的客户端 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>${elasticsearch-data.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>4.3.4</version>
</dependency>
<java.version>1.8</java.version>
<!-- 统一版本 -->
<elasticsearch.version>7.6.1</elasticsearch.version>
<elasticsearch-data.version>2.6.7</elasticsearch-data.version>

3、编写实体类

@Document(indexName = "test_user1")//指定索引名称
public class User implements Serializable {

    @Id
    private int id;
    @Field(type =  FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

4、测试

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    //创建索引
    @Test
    public void createIndex(){
        // 指定文档的数据实体类
        IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(User.class);
        // 创建索引
        indexOperations.create();
        // 创建字段映射
        Document mapping = indexOperations.createMapping();
        // 给索引设置字段映射
        indexOperations.putMapping(mapping);
    }

    //添加数据
    @Test
    public void insertUser(){
        List<User> users = new ArrayList<>();
        users.add(new User(1,"zhangsan",2));
        users.add(new User(2,"lisi",3));
        users.add(new User(3,"wangwu",14));
        List indexQueryList = new ArrayList<>();
        users.forEach(user -> {
            IndexQuery indexQuery = new IndexQuery();
            indexQuery.setObject(user);
            indexQueryList.add(indexQuery);
        });
        elasticsearchRestTemplate.bulkIndex(indexQueryList, IndexCoordinates.of("test_user1"));
    }
    
    //删除索引
    @Test
    void delete(){
        boolean delete = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("test_user1")).delete();
        System.out.println(delete);
    }
}

查询索引信息

@Test
void search(){
    NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();
    SearchHits<User> hits = elasticsearchRestTemplate.search(query.build(),User.class);
    for (SearchHit<User> user:hits) {
        System.out.println(user.getContent().toString());
    }
}

输出信息

image.png