[From] http://www.tuicool.com/articles/JBvQrmj

本文讲解Spring Boot基础下,如何使用 ElasticSearch,实现全文搜索。

版本须知

spring data elasticSearch 的版本与Spring boot、Elasticsearch版本需要匹配。

Spring Boot Version (x) Spring Data Elasticsearch Version (y) Elasticsearch Version (z)
x <= 1.3.5 y <= 1.3.4 z <= 1.7.2
x >= 1.4.x 2.0.0 <=y <5.0.0 2.0.0 <= z < 5.0.0

环境依赖

修改 POM 文件,添加 spring-boot-starter-data-elasticsearch 依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

数据源

方案一 使用 Spring Boot 默认配置

在 src/main/resources/application.properties 中配置数据源信息。

spring.data.elasticsearch.properties.host = 127.0.0.1
spring.data.elasticsearch.properties.port = 9300

通过 Java Config 创建ElasticSearchConfig。

@Configuration
@EnableElasticsearchRepositories("com.lianggzone.springboot.action.data.elasticsearch")
public class ElasticSearchConfig {}

方案二 手动创建

通过 Java Config 创建ElasticSearchConfig。

@Configuration
@EnableElasticsearchRepositories("com.lianggzone.springboot.action.data.elasticsearch")
public class ElasticsearchConfig2 { private String hostname = "127.0.0.1";
private int port = 9300; @Bean
public ElasticsearchOperations elasticsearchTemplate() {
return new ElasticsearchTemplate(client());
} @Bean
public Client client() {
TransportClient client = new TransportClient();
TransportAddress address = new InetSocketTransportAddress(hostname, port); client.addTransportAddress(address);
return client;
}
}

业务操作

实体对象

@Document(indexName = "springbootdb", type = "news")
public class News { @Id
private String id; private String title; private String content; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd'T'HHmmss.SSS'Z'")
@Field(type = FieldType.Date, format = DateFormat.basic_date_time, index = FieldIndex.not_analyzed)
@CreatedDate
private Date createdDateTime; // GET和SET方法
}

DAO相关

public interface NewsRepository extends ElasticsearchRepository<News, String> {
public List<News> findByTitle(String title);
}

Service相关

我们来定义实现类,Service层调用Dao层的方法,这个是典型的套路。

@Service
public class NewsService { @Autowired
private NewsRepository newsRepository; public Iterable<News> findAll(){
return newsRepository.findAll();
} public Iterable<News> search(QueryBuilder query){
return newsRepository.search(query);
} public List <News> findByTitle(String title) {
return this.newsRepository.findByTitle(title);
} public void deleteAll(String id){
this.newsRepository.delete(id);
} public void init(){
for (int i = 0; i < 100; i++) {
News news = new News();
news.setId(i+"");
news.setTitle(i + ".梁桂钊单元测试用例");
news.setContent("梁桂钊单元测试用例"+i+"xxxxx");
news.setCreatedDateTime(new Date());
this.newsRepository.save(news);
}
}
}

Controller相关

为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。

@RestController
@RequestMapping(value="/data/elasticsearch/news")
public class NewsController { @Autowired
private NewsService newsService; /**
* 初始化
* @param request
*/
@RequestMapping(value = "/init", method = RequestMethod.POST)
public void init(HttpServletRequest request) {
this.newsService.init();
} /**
* findAll
* @param request
* @return
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public Map<String, Object> findList(HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("items", this.newsService.findAll());
return params;
} /**
* find
* @param request
* @return
*/
@RequestMapping(value = "/{title}", method = RequestMethod.GET)
public Map<String, Object> search(@PathVariable String title) {
// 构建查询条件
QueryBuilder queryBuilder = QueryBuilders.queryString(title); // Pekkle: spring boot 1.4.1 集成elastic search后看不到此方法,用如下方法代替。
QueryBuilder queryBuilder = QueryBuilders.simpleQueryStringQuery(title);
Map<String, Object> params = new HashMap<String, Object>(); params.put("items", this.newsService.search(queryBuilder)); return params; } }

总结

上面这个简单的案例,让我们看到了 Spring Boot 整合 ElasticSearch 流程如此简单。

[转] Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch的更多相关文章

  1. Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache

    文章目录 1. Redis Cache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 Redis Cache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存 ...

  2. Spring Boot 揭秘与实战(二) 数据缓存篇 - Guava Cache

    文章目录 1. Guava Cache 集成 2. 个性化配置 3. 源代码 本文,讲解 Spring Boot 如何集成 Guava Cache,实现缓存. 在阅读「Spring Boot 揭秘与实 ...

  3. Spring Boot 揭秘与实战(二) 数据缓存篇 - EhCache

    文章目录 1. EhCache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 EhCache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门 ...

  4. Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门

    文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...

  5. Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理

    文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...

  6. Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch

    文章目录 1. 版本须知 2. 环境依赖 3. 数据源 3.1. 方案一 使用 Spring Boot 默认配置 3.2. 方案二 手动创建 4. 业务操作5. 总结 4.1. 实体对象 4.2. D ...

  7. Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB

    文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用mongoTemplate操作4. 总结 3.1. 实体对象 3 ...

  8. Spring Boot 揭秘与实战(二) 数据存储篇 - Redis

    文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用 redisTemplate 操作4. 总结 3.1. 工具类 ...

  9. Spring Boot 揭秘与实战(二) 数据存储篇 - JPA整合

    文章目录 1. 环境依赖 2. 数据源 3. 脚本初始化 4. JPA 整合方案一 通过继承 JpaRepository 接口 4.1. 实体对象 4.2. DAO相关 4.3. Service相关 ...

  10. Spring Boot 揭秘与实战(二) 数据存储篇 - MyBatis整合

    文章目录 1. 环境依赖 2. 数据源3. 脚本初始化 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 4. MyBatis整合5. 总结 4.1. 方案一 通过 ...

随机推荐

  1. Service和IntentService的区别

    不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentService,前段时间准备面试的时候看到了一篇关于IntentServic ...

  2. python 将字符串转化为可执行代码

    场景: 在一个遍历的的程序中,有一步需要调用函数,调用的方式是根据输入参数,从3个可供被调用的函数中,选择其中一个.所以写了一个dict={1:"function_a_name", ...

  3. Oracle——分组函数

    AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 )) MIN(最小值)和 MAX(最大值)函 ...

  4. Maven——继承和聚合

    实际项目中,可能正要构建一个大型的系统,但又不想一遍又一遍的重复同样的依赖元素,这种情况是经常出现的.不过还好,maven提供了继承机制,项目可以通过parent元素使用继承,可以避免这种重复.当一个 ...

  5. 金融卡IC卡知识50问

    1.什么是金融IC卡? 金融IC卡又称为芯片银行卡,是以芯片作为介质的银行卡.芯片卡容量大,可以存储密钥.数字证书.指纹等信息,其工作原理类似于微型计算机,能够同时处理多种功能,为持卡人提供一卡多用的 ...

  6. 泊松分布 & 指数分布

    一.泊松分布 日常生活中,大量事件是有固定频率的. 某医院平均每小时出生3个婴儿 某公司平均每10分钟接到1个电话 某超市平均每天销售4包xx牌奶粉 某网站平均每分钟有2次访问 它们的特点就是,我们可 ...

  7. Mac10.9下的libtiff编译

    libtiff介绍 libtiff下载 libtiff编译 libtiff介绍? 参考:http://en.wikipedia.org/wiki/Tiff libtiff下载 直接到官网下载:http ...

  8. (一)ASP.NET中JavaScript的中英文(多语言)实现方案

    PS: https://github.com/hzlzh/Front-End-Standards/wiki/HTML-CSS-JS-i18n 本文原始思路起源于此网址,请自行查看. 本文只是简单的一个 ...

  9. 使用Recyclerview实现图片水平自动循环滚动

    简介: 本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果) 效果图: 思路: 1.准备m张图片 1.使用Recyclerview实现,返回无数个(实际Inter ...

  10. Log--检查各数据库日志的使用情况

    -- Recovery model, log reuse wait description, log file size,-- log usage size and compatibility lev ...