WeChat search: technology cat, share programming, software, technology.

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 for interacting with Elastichsearch documents and easily writing a repository-style Data access layer.

Maven rely on

<! --https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> < version > 2.3.0. RELEASE < / version > < / dependency >

Configure the application. The properties

Spring. Elasticsearch. Rest. Uris, = http://localhost:9200 # spring. Elasticsearch. Rest. The username = # / / user name Spring. Elasticsearch. Rest. Password = / / password # spring elasticsearch. Rest. The connection timeout = / / # connection timeout time Spring. Elasticsearch. Rest. Read timeout = / / read timeout

CRUD operations

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) @field (type = fieldtype.long) @field (type = fieldtype.long) }

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

The query

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); }}

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); }}

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"); }}

Custom JSON queries

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); }

Test

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

References

[1] Spring Data Elasticsearch: https://spring.io/projects/sp…