共计 5130 个字符,预计需要花费 13 分钟才能阅读完成。
微信搜一搜:科技猫,分享编程,软件,科技。
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 | |
@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); | |
} | |
} |
减少
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("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; | |
@SpringBootTest | |
public 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 | |
@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…
正文完
发表至: springboot
2021-06-30