引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>pers.zhang</groupId>
<artifactId>sb_elasticsearch</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sb_elasticsearch</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置
application.yml
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300
repositories:
enabled: true
启动类
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "pers.zhang")
public class SbElasticsearchApplication {
public static void main(String[] args) {
SpringApplication.run(SbElasticsearchApplication.class, args);
}
}
实体类
package pers.zhang.sb_elasticsearch.entity;
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;
/**
* @Author: acton_zhang
* @Date: 2020/3/14 3:30 下午
* @Version 1.0
*/
@Document(indexName = "index-article", type = "article")
public class Article {
@Id
@Field(type = FieldType.Long, store = true)
private Long id;
@Field(type = FieldType.text, store = true, analyzer = "ik_smart")
private String title;
@Field(type = FieldType.text, store = true, analyzer = "ik_smart")
private String content;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, Long> {
//根据标题进行查询
List<Article> findByTitle(String title);
List<Article> findByTitleOrContent(String title, String context);
List<Article> findByTitleOrContent(String title, String context, Pageable pageable);
}
测试
@SpringBootTest(classes = SbElasticsearchApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SbElasticsearchApplicationTests {
@Autowired
ArticleRepository articleRepository;
@Autowired
ElasticsearchTemplate elasticsearchTemplate;
@Test
public void createIndex() {
elasticsearchTemplate.createIndex(Article.class);
}
@Test
public void addDocument () {
Article article = new Article();
article.setId(3l);
article.setTitle("Maven对象模型");
article.setContent("佛教圣地六块腹肌塑料袋放假了撒");
articleRepository.save(article);
}
@Test
//查询所有
public void findAll () {
Iterable<Article> all = articleRepository.findAll();
all.forEach( a -> System.out.println(a));
}
@Test
//根据id查询
public void findById () {
Optional<Article> byId = articleRepository.findById(1l);
System.out.println(byId.get());
}
@Test
public void findByTitle () {
List<Article> list = articleRepository.findByTitle("对象");
list.forEach( a -> System.out.println(a));
}
@Test
//多条件查询
public void findByTitleOrContent () {
List<Article> list = articleRepository.findByTitleOrContent("ddd", "放假");
list.forEach( a -> System.out.println(a));
}
@Test
//分页查询
public void findByPage () {
Pageable pageable = PageRequest.of(0, 2);
List<Article> list = articleRepository.findByTitleOrContent("ddd", "放假", pageable);
list.forEach( a -> System.out.println(a));
}
//原生查询
@Test
public void testNativeSearchQuery () {
NativeSearchQuery query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.queryStringQuery("佛放假").defaultField("content"))
.withPageable(PageRequest.of(0, 5))
.build();
List<Article> articles = elasticsearchTemplate.queryForList(query, Article.class);
articles.forEach(a -> System.out.println(a));
}
@Test
public void deleteById () {
articleRepository.deleteById(1l);
}
}