注意事项见代码注释:
package com.ddao.es.test;
import com.ddao.es.entity.Article;
import com.ddao.es.repositories.ArticleRrpository;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@SuppressWarnings("ALL")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class Testes {
@Autowired
private ArticleRrpository articleRrpository;
@Autowired
private ElasticsearchTemplate template;
@Test
public void testes(){
template.createIndex(Article.class);
//配置mapping映射关系
//template.putMapping(Article.class);
}
@Test
public void save(){
Article article = new Article();
for (int i = 0; i < 100; i++) {
article.setId((long)i);
article.setTitle("你道哥还是你道哥 "+i);
article.setContent("今夜阳光明媚,今晚不醉不归 "+i);
articleRrpository.save(article);
}
}
@Test
public void delete(){
articleRrpository.deleteById((long)1);
}
@Test
public void search(){
Page<Article> search = articleRrpository.search(new QueryStringQueryBuilder("道哥") {
}, PageRequest.of(1, 10));
// for (Article article : search) {
// System.out.println(article);
// }
search.forEach(a->System.out.println(a));
}
@Test
public void findbyid(){
System.out.println(articleRrpository.findById((long) 1));
}
/**
* 查询默认只有findbyId一个方法,如果有其他需求,比如根据标题或者内容。。或者其他已经定义的字段
* 自需要根据驼峰式的命名规则,在dao层定义即可,并且不需要实现
* 注意:
* 分页默认是最多只显示10条
* 如果要显示更多,需要在接口的方法中写一个重载方法,多传入一个阐述Pageable即可
*
* 额外注意:
* 这种查询方法查询,虽然进行了先分词在查询的操作。但是,它底层是对每个分词的进行的“and”操作
* 也就是说,我要查询一个字段,中的“中国你好”,该字段就必须同时包含“中国”和“你好”
* 解决:
* 采用原生的查询对象查询。
*/
@Test
public void findbyFeild(){
//articleRrpository.findArticleByTitle("11").forEach(a-> System.out.println(a));
Pageable pageable = PageRequest.of(0,15);
articleRrpository.findArticleByTitle("道哥",pageable).forEach(a-> System.out.println(a));
}
//原声的查询方法查询
@Test
public void findByOld(){
//创建一个SearchQuery对象
SearchQuery searchQuery = new NativeSearchQueryBuilder()
//设置查询条件,此处可以使用QueryBuilders创建多种查询
.withQuery(QueryBuilders.queryStringQuery("道哥真的帅").defaultField("title"))
//还可以设置分页信息
.withPageable(PageRequest.of(1,5))
//创建SearchQuery对象
.build();
//使用模板对象执行查询
template.queryForList(searchQuery,Article.class).forEach(a->System.out.println(a));
}
}
导包:<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j‐to‐slf4j</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j‐api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j‐simple</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson‐core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson‐databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson‐annotations</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring‐data‐elasticsearch</artifactId>
<version>3.0.5.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport‐netty4‐client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐test</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
</dependencies>