> 文章列表 > SpringDataElasticSearch

SpringDataElasticSearch

SpringDataElasticSearch

第三章 Spring Data ElasticSearch 使用

3.1 Spring Data ElasticSearch简介

3.1.1 什么是Spring Data

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

Spring Data的官网:http://projects.spring.io/spring-data/

Spring Data常用的功能模块如下:

SpringDataElasticSearch

3.1.2 什么是Spring Data ElasticSearch

Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 。Spring Data为Elasticsearch项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域为中心的模型与Elastichsearch交互文档和轻松地编写一个存储库数据访问层。

官方网站:http://projects.spring.io/spring-data-elasticsearch/

3.2 Spring Data ElasticSearch入门

1)导入Spring Data ElasticSearch坐标

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.itheima</groupId><artifactId>itheima_elasticsearch_demo3</artifactId><version>1.0-SNAPSHOT</version><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></project>

2)创建applicationContext.xml配置文件,引入elasticsearch命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/elasticsearchhttp://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"></beans>

6) 配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/elasticsearchhttp://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"><!-- 扫描Dao包,自动创建实例 --><elasticsearch:repositories base-package="com.itheima.dao"/><!-- 扫描Service包,创建Service的实体 --><context:component-scan base-package="com.itheima.service"/><!-- 配置elasticSearch的连接 --><!-- 配置elasticSearch的连接 --><elasticsearch:transport-client id="client" cluster-nodes="localhost:9300" cluster-name="my-elasticsearch"/><!-- ElasticSearch模版对象 --><bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"><constructor-arg name="client" ref="client"></constructor-arg></bean></beans>

管理索引库

创建一个Entity类,其实就是一个JavaBean(pojo)映射到一个Document上需要添加一个注解进行标注。

package com.itheima.es.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;@Document(indexName = "sdes_blog",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;}
}

创建一个Dao,是一个接口,需要继承ElasticsearchRepository接口

package com.itheima.es.repositories;import com.itheima.es.entity.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {}
import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataElasticSearchTest {@Autowiredprivate ArticleRepository articleRepository;@Autowiredprivate ElasticsearchTemplate template;@Testpublic void createIndex() throws Exception {///创建索引,并配置映射关系template.createIndex(Article.class);//配置映射关系//template.putMapping(Article.class);}}

SpringDataElasticSearch

3.3 Spring Data ElasticSearch的常用操作

3.3.1 增删改查方法测试

package com.itheima.service;import com.itheima.domain.Article;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;public interface ArticleService {//保存public void save(Article article);//删除public void delete(Article article);//查询全部public Iterable<Article> findAll();//分页查询public Page<Article> findAll(Pageable pageable);}

添加文档

   @Testpublic void addDocument() throws Exception{//创建一个Article对象Article article = new Article();article.setId(1);article.setTitle("Maven项目对象模型");article.setContent("Maven是一个采用Java编写的开元项目管理工具.");///把文档写入索引库articleRepository.save(article);}

SpringDataElasticSearch

删除文档

 @Testpublic void deleteDocumentById() throws Exception{articleRepository.deleteById(1l);//全部删除//articleRepository.deleteAll();}

简单查询文档

@Testpublic void findAll() throws Exception{Iterable<Article> all = articleRepository.findAll();all.forEach(a-> System.out.println(a));}
@Testpublic void testFindById() throws Exception{Optional<Article> byId = articleRepository.findById(1l);Article article = byId.get();System.out.println(article);}

自定义查询方法查询

package com.itheima.es.repositories;import com.itheima.es.entity.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import java.util.List;public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {List<Article> findByTitle(String title);List<Article> findByTitleOrContent(String title, String content);List<Article> findByTitleOrContent(String title, String content, Pageable pageable);
}
@Testpublic void testFindByTitle() throws Exception{List<Article> maven = articleRepository.findByTitle("maven");maven.stream().forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent() throws Exception{articleRepository.findByTitleOrContent("maven", "商务与投资").forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent1() throws Exception{PageRequest pageRequest = PageRequest.of(1, 5);articleRepository.findByTitleOrContent("maven", "商务与投资",pageRequest).forEach(a -> System.out.println(a));}

3.3.2 常用查询命名规则

关键字 命名规则 解释 示例
and findByField1AndField2 根据Field1和Field2获得数据 findByTitleAndContent
or findByField1OrField2 根据Field1或Field2获得数据 findByTitleOrContent
is findByField 根据Field获得数据 findByTitle
not findByFieldNot 根据Field获得补集数据 findByTitleNot
between findByFieldBetween 获得指定范围的数据 findByPriceBetween
lessThanEqual findByFieldLessThan 获得小于等于指定值的数据 findByPriceLessThan

3.3.3 查询方法测试

1)dao层实现

package com.itheima.dao;import com.itheima.domain.Article;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {//根据标题查询List<Article> findByTitle(String condition);//根据标题查询(含分页)Page<Article> findByTitle(String condition, Pageable pageable);
}

2)service层实现

public interface ArticleService {//根据标题查询List<Article> findByTitle(String condition);//根据标题查询(含分页)Page<Article> findByTitle(String condition, Pageable pageable);
}
package com.itheima.service.impl;import com.itheima.dao.ArticleRepository;
import com.itheima.domain.Article;
import com.itheima.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class ArticleServiceImpl implements ArticleService {@Autowiredprivate ArticleRepository articleRepository;public List<Article> findByTitle(String condition) {return articleRepository.findByTitle(condition);}public Page<Article> findByTitle(String condition, Pageable pageable) {return articleRepository.findByTitle(condition,pageable);}}

3)测试代码

package com.itheima.test;import com.itheima.domain.Article;
import com.itheima.service.ArticleService;
import org.elasticsearch.client.transport.TransportClient;
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.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.List;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class SpringDataESTest {@Autowiredprivate ArticleService articleService;@Autowiredprivate TransportClient client;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;/条件查询*/@Testpublic void findByTitle(){String condition = "版本";List<Article> articleList = articleService.findByTitle(condition);for(Article article:articleList){System.out.println(article);}}/条件分页查询*/@Testpublic void findByTitlePage(){String condition = "版本";Pageable pageable = PageRequest.of(2,10);Page<Article> page = articleService.findByTitle(condition,pageable);for(Article article:page.getContent()){System.out.println(article);}}}

3.3 Spring Data ElasticSearch的常用操作

3.3.1 增删改查方法测试

package com.itheima.service;import com.itheima.domain.Article;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;public interface ArticleService {//保存public void save(Article article);//删除public void delete(Article article);//查询全部public Iterable<Article> findAll();//分页查询public Page<Article> findAll(Pageable pageable);}
package com.itheima.service.impl;import com.itheima.dao.ArticleRepository;
import com.itheima.domain.Article;
import com.itheima.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;@Service
public class ArticleServiceImpl implements ArticleService {@Autowiredprivate ArticleRepository articleRepository;public void save(Article article) {articleRepository.save(article);}public void delete(Article article) {articleRepository.delete(article);}public Iterable<Article> findAll() {Iterable<Article> iter = articleRepository.findAll();return iter;}public Page<Article> findAll(Pageable pageable) {return articleRepository.findAll(pageable);}
}
package com.itheima.test;import com.itheima.domain.Article;
import com.itheima.service.ArticleService;
import org.elasticsearch.client.transport.TransportClient;
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.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class SpringDataESTest {@Autowiredprivate ArticleService articleService;@Autowiredprivate TransportClient client;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;/创建索引和映射*/@Testpublic void createIndex(){elasticsearchTemplate.createIndex(Article.class);elasticsearchTemplate.putMapping(Article.class);}/测试保存文档*/@Testpublic void saveArticle(){Article article = new Article();article.setId(100);article.setTitle("测试SpringData ElasticSearch");article.setContent("Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 \\n" +"    Spring Data为Elasticsearch Elasticsearch项目提供集成搜索引擎");articleService.save(article);}/测试保存*/@Testpublic void save(){Article article = new Article();article.setId(1001);article.setTitle("elasticSearch 3.0版本发布");article.setContent("ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口");articleService.save(article);}/测试更新*/@Testpublic void update(){Article article = new Article();article.setId(1001);article.setTitle("elasticSearch 3.0版本发布...更新");article.setContent("ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口");articleService.save(article);}/测试删除*/@Testpublic void delete(){Article article = new Article();article.setId(1001);articleService.delete(article);}/批量插入*/@Testpublic void save100(){for(int i=1;i<=100;i++){Article article = new Article();article.setId(i);article.setTitle(i+"elasticSearch 3.0版本发布..,更新");article.setContent(i+"ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口");articleService.save(article);}}/分页查询*/@Testpublic void findAllPage(){Pageable pageable = PageRequest.of(1,10);Page<Article> page = articleService.findAll(pageable);for(Article article:page.getContent()){System.out.println(article);}}
}

3.3.4使用Elasticsearch的原生查询对象进行查询。

@Testpublic void findByNativeQuery() {//创建一个SearchQuery对象SearchQuery searchQuery = new NativeSearchQueryBuilder()//设置查询条件,此处可以使用QueryBuilders创建多种查询.withQuery(QueryBuilders.queryStringQuery("备份节点上没有数据").defaultField("title"))//还可以设置分页信息.withPageable(PageRequest.of(1, 5))//创建SearchQuery对象.build();//使用模板对象执行查询elasticsearchTemplate.queryForList(searchQuery, Article.class).forEach(a-> System.out.println(a));}
一、使用Java客户端管理ES
1、创建索引库
步骤:1)创建一个Java工程2)添加jar包,添加maven的坐标3)编写测试方法实现创建索引库1、创建一个Settings对象,相当于是一个配置信息。主要配置集群的名称。2、创建一个客户端Client对象3、使用client对象创建一个索引库4、关闭client对象
2、使用Java客户端设置Mappings步骤:1)创建一个Settings对象2)创建一个Client对象3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象4)使用client向es服务器发送mapping信息5)关闭client对象
3、添加文档步骤:1)创建一个Settings对象2)创建一个Client对象3)创建一个文档对象,创建一个json格式的字符串,或者使用XContentBuilder4)使用Client对象吧文档添加到索引库中5)关闭client
4、添加文档第二种方式创建一个pojo类使用工具类把pojo转换成json字符串把文档写入索引库二、使用es客户端实现搜索
1、根据id搜索QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3QueryString查询方式(带分析的查询)QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
查询步骤:1)创建一个Client对象2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。3)使用client执行查询4)得到查询的结果。5)取查询结果的总记录数6)取查询结果列表7)关闭client
4、分页的处理在client对象执行查询之前,设置分页信息。然后再执行查询//执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder)//设置分页信息.setFrom(0)//每页显示的行数.setSize(5).get();分页需要设置两个值,一个from、sizefrom:起始的行号,从0开始。size:每页显示的记录数
5、查询结果高亮显示
(1)高亮的配置1)设置高亮显示的字段2)设置高亮显示的前缀3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息。
(3)遍历结果列表时可以从结果中取高亮结果。
三、SpringDataElasticSearch
1、工程搭建1)创建一个java工程。2)把相关jar包添加到工程中。如果maven工程就添加坐标。3)创建一个spring的配置文件1、配置elasticsearch:transport-client2、elasticsearch:repositories:包扫描器,扫描dao3、配置elasticsearchTemplate对象,就是一个bean
2、管理索引库1、创建一个Entity类,其实就是一个JavaBean(pojo)映射到一个Document上需要添加一些注解进行标注。2、创建一个Dao,是一个接口,需要继承ElasticSearchRepository接口。3、编写测试代码。3、创建索引直接使用ElasticsearchTemplate对象的createIndex方法创建索引,并配置映射关系。
4、添加、更新文档1)创建一个Article对象2)使用ArticleRepository对象向索引库中添加文档。
5、删除文档直接使用ArticleRepository对象的deleteById方法直接删除。
6、查询索引库直接使用ArticleRepository对象的查询方法。
7、自定义查询方法需要根据SpringDataES的命名规则来命名。如果不设置分页信息,默认带分页,每页显示10条数据。如果设置分页信息,应该在方法中添加一个参数PageablePageable pageable = PageRequest.of(0, 15);注意:设置分页信息,默认是从0页开始。可以对搜索的内容先分词然后再进行查询。每个词之间都是and的关系。
8、使用原生的查询条件查询NativeSearchQuery对象。使用方法:1)创建一个NativeSearchQuery对象设置查询条件,QueryBuilder对象2)使用ElasticSearchTemplate对象执行查询3)取查询结果

Article

package com.itheima.es.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;@Document(indexName = "sdes_blog",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;}@Overridepublic String toString() {return "Article{" +"id=" + id +", title='" + title + '\\'' +", content='" + content + '\\'' +'}';}
}

ArticleRepository

package com.itheima.es.repositories;import com.itheima.es.entity.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import java.util.List;public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {List<Article> findByTitle(String title);List<Article> findByTitleOrContent(String title, String content);List<Article> findByTitleOrContent(String title, String content, Pageable pageable);
}

测试

import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.List;
import java.util.Optional;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataElasticSearchTest {@Autowiredprivate ArticleRepository articleRepository;@Autowiredprivate ElasticsearchTemplate template;@Testpublic void createIndex() throws Exception {///创建索引,并配置映射关系template.createIndex(Article.class);//配置映射关系//template.putMapping(Article.class);}@Testpublic void addDocument() throws Exception{for (int i = 10; i < 20; i++) {//创建一个Article对象Article article = new Article();article.setId(i);article.setTitle("Maven项目对象模型2"+i);article.setContent("Maven是一个采用Java编写的开元项目管理工具2."+i);///把文档写入索引库articleRepository.save(article);}}@Testpublic void deleteDocumentById() throws Exception{articleRepository.deleteById(2l);//全部删除//articleRepository.deleteAll();}@Testpublic void findAll() throws Exception{Iterable<Article> all = articleRepository.findAll();all.forEach(a-> System.out.println(a));}@Testpublic void testFindById() throws Exception{Optional<Article> byId = articleRepository.findById(1l);Article article = byId.get();System.out.println(article);}@Testpublic void testFindByTitle() throws Exception{List<Article> maven = articleRepository.findByTitle("maven");maven.stream().forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent() throws Exception{articleRepository.findByTitleOrContent("maven", "商务与投资").forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent1() throws Exception{PageRequest pageRequest = PageRequest.of(1, 5);articleRepository.findByTitleOrContent("maven", "商务与投资",pageRequest).forEach(a -> System.out.println(a));}@Testpublic void testNativeSearchQuery() throws Exception{//创建一个查询对象NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("maven是一个工程构建工具").defaultField("title")).withPageable(PageRequest.of(1, 5)).build();//执行查询List<Article> articles = template.queryForList(query, Article.class);articles.forEach(article -> System.out.println(article));}
}