The basic use of Spring Data Elasticsearch is really fragrant. Warning!

The Spring Data Elasticsearch project provides integration with the Elasticsearch search engine. The key functional area of ​​Spring Data Elasticsearch is a POJO-centric model that is used to interact with Elastichsearch documents and easily write a repository-style data access layer.
Official introduction: https://spring.io/projects/spring-data-elasticsearch

One, Maven dependency

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-elasticsearch</artifactId>
			<version>4.0.4.RELEASE</version>
		</dependency>

Second, placement application.properties

spring.data.elasticsearch.cluster-name=my-elasticsearch
spring.data.elasticsearch.cluster-nodes=http://127.0.0.1:9300

Three, entity class

package com.example.entity;

import lombok.Data;
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 java.io.Serializable;

@Data
@Document(indexName = "account", type = "_doc")
public class Message implements Serializable {
    
    
    private static final long serialVersionUID = 5710293639676035958L;
    @Id
    private String id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String username;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String email;

    @Field(type = FieldType.Long)
    private String age;

    @Field(type = FieldType.Long) // 意思自定义属性格式 时间格式,我们在java程序中可以传入这些格式的时间
    private Long createTime;
}

、 、 Dao

Five, basic CRUD operations

Refer to the official instructions: https://docs.spring.io/spring-data/elasticsearch/docs/4.0.4.RELEASE/reference/html/#elasticsearch.repositories

1. Query

Dao

package com.example.dao;

import com.example.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface MessageDao extends ElasticsearchRepository<Message, String> {
    
    
    Page<Message> findAll(Pageable pageable);

    Iterable<Message> findAll(Sort sort);

    List<Message> findByUsername(String username);

    List<Message> findByAgeBetween(Long mix, Long max);

    Long countByAgeBetween(Long mix, Long max);
}

Test

package com.example;

import com.example.dao.MessageDao;
import com.example.entity.Message;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

import java.util.List;

@SpringBootTest
public class SpringDataElasticsearchFindTest {
    
    
    @Autowired
    private MessageDao messageDao;

    @Test
    public void findAll() {
    
    
        Iterable<Message> all = messageDao.findAll();
        all.forEach(System.out::println);
    }

    @Test
    public void findAllPageRequest() {
    
    
        Iterable<Message> all = messageDao.findAll(PageRequest.of(0, 1));
        all.forEach(System.out::println);
    }

    @Test
    public void findAllSort() {
    
    
        Iterable<Message> all = messageDao.findAll(Sort.by("age").descending());
        all.forEach(System.out::println);
    }

    @Test
    public void findByUsername() {
    
    
        List<Message> messages = messageDao.findByUsername("JonssonYan");
        messages.forEach(System.out::println);
    }

    @Test
    public void findByAgeBetween() {
    
    
        List<Message> messages = messageDao.findByAgeBetween(10L, 20L);
        messages.forEach(System.out::println);
    }

    @Test
    public void countByAgeBetween() {
    
    
        Long count = messageDao.countByAgeBetween(10L, 20L);
        System.out.println(count);
    }
}

2. Increase

package com.example;

import com.example.dao.MessageDao;
import com.example.entity.Message;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

@SpringBootTest
public class SpringDataElasticsearchInsertTest {
    
    
    @Autowired
    private MessageDao messageDao;

    @Test
    public void insert() {
    
    
        Message message = new Message();
        message.setId("3");
        message.setAge("18");
        message.setEmail("[email protected]");
        message.setCreateTime(new Date().getTime());
        message.setUsername("JonssonYan");
        messageDao.save(message);
    }
}

Insert picture description here

3. Modify

Modification is the same as adding, only need to set the same ID and the data will be automatically replaced after execution

4. Delete

package com.example;

import com.example.dao.MessageDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SpringDataElasticsearchDeleteTest {
    
    
    @Autowired
    private MessageDao messageDao;

    @Test
    public void deleteById(){
    
    
        messageDao.deleteById("2");
    }
}

Insert picture description here

Six, advanced

1. Custom JSON query

Test

@Test
    public void findByUsername() {
    
    
        List<Message> messages = messageDao.findByUsername("JonssonYan");
        messages.forEach(System.out::println);
    }

Dao

package com.example.dao;

import com.example.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface MessageDao extends ElasticsearchRepository<Message, String> {
    
    
    @Query("{\"match\": {\"username\": {\"query\": \"?0\"}}}")
    List<Message> findByUsername(String username);
}

Guess you like

Origin blog.csdn.net/y1534414425/article/details/108989217