[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. Solidity oraclize query apikey加密

    solidity 程序中如果用到oraclize query,api调用需要apikey,则最好加密apikey,否则公开solidity代码时会连同apikey一起公开. 加密方法: https:/ ...

  2. CountDownLatch、信号量

    countDownlatch可以阻塞线程,可以在某种条件下继续执行 不安全的:

  3. R dataframe 遗忘, which 矩阵搜索

    A data frame is used for storing data tables. It is a list of vectors of equal length. For example, ...

  4. canvas基本绘制图形

    canvas H5新增的元素,提供了强大的图形的绘制,变换,图片,视频的处理等等.需要使用JavaScript脚本操作 浏览器支持 大多数的现代浏览器都可以支持:IE8以下的浏览器不支持 画布 可支持 ...

  5. MVC区域路由配置

  6. Office Diary(工作日记本)

    Office Diary 是一款免费.绿色小巧的写日记和收集文档资料的软件,界面效仿Office Word ,支持Word中常用的文字编辑排版功能,可以作为Microsoft Office产品系列的强 ...

  7. LoadRunner--获取请求的返回结果函数

    注:内容来自网络 Action(){ web_set_max_html_param_len("262144"); // 默认最大长度为256 web_reg_save_param( ...

  8. Setter

    这个还是比较好理解的. 设置器. 用法还是比较简单的. 语法特征: 设置属性[Property] 填充值[Value] 注意这个是封闭单行闭合标签,可以换行,但只允许在同一个标签闭合. 事例用法: & ...

  9. 第二篇 Python运算符

    1.算术运算符 运算符 描述  +  两个值相加  -  两个值相减  *  两个值相乘  /  两个值相除  %  得到两个数相除的余数  **  x**y得到x的y次幂  //  返回两个数相除商 ...

  10. selenium面试题

    selenium中如何判断元素是否存在? selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断. # 判断元素是否存在 try: dr.find_elem ...