微信搜一搜:科技猫,分享编程,软件,科技。

Spring Data Elasticsearch我的项目提供了与Elasticsearch搜索引擎的集成。Spring Data Elasticsearch的要害性能区域是一个以POJO为核心的模型,该模型用于与Elastichsearch文档进行交互并轻松编写存储库款式的数据拜访层。

Maven依赖

<!--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>

配置application.properties

spring.elasticsearch.rest.uris=http://localhost:9200# spring.elasticsearch.rest.username= // 用户名# spring.elasticsearch.rest.password=// 明码# spring.elasticsearch.rest.connection-timeout= // 连贯超时工夫# spring.elasticsearch.rest.read-timeout= // 读取超时工夫

CRUD操作

实体类

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

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@Repositorypublic 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;@SpringBootTestpublic 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);    }}

减少

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;@SpringBootTestpublic class SpringDataElasticsearchInsertTest {    @Autowired    private MessageDao messageDao;    @Test    public void insert() {        Message message = new Message();        message.setId("3");        message.setAge("18");        message.setEmail("yz808@qq.com");        message.setCreateTime(new Date().getTime());        message.setUsername("JonssonYan");        messageDao.save(message);    }}

删除

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;@SpringBootTestpublic class SpringDataElasticsearchDeleteTest {    @Autowired    private MessageDao messageDao;    @Test    public void deleteById(){        messageDao.deleteById("2");    }}

自定义JSON查问

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@Repositorypublic 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...