文章目录
本文讲解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);
- Map<String, Object> params = new HashMap<String, Object>();
- params.put("items", this.newsService.search(queryBuilder));
- return params;
- }
- }
总结
上面这个简单的案例,让我们看到了 Spring Boot 整合 ElasticSearch 流程如此简单。
源代码
相关示例完整代码: springboot-action
(完)
如果觉得我的文章对你有帮助,请随意打赏。
- 版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
- 转载声明:*转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
- 文章标题:Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch
- 文章链接:http://blog.720ui.com/2016/springboot_02_data_elasticsearch/
Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch的更多相关文章
-
Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理
文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB
文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用mongoTemplate操作4. 总结 3.1. 实体对象 3 ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - Redis
文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用 redisTemplate 操作4. 总结 3.1. 工具类 ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - JPA整合
文章目录 1. 环境依赖 2. 数据源 3. 脚本初始化 4. JPA 整合方案一 通过继承 JpaRepository 接口 4.1. 实体对象 4.2. DAO相关 4.3. Service相关 ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - MyBatis整合
文章目录 1. 环境依赖 2. 数据源3. 脚本初始化 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 4. MyBatis整合5. 总结 4.1. 方案一 通过 ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置
文章目录 1. 环境依赖 2. 数据源 3. 单元测试 4. 源代码 在某些场景下,我们可能会在一个应用中需要依赖和访问多个数据源,例如针对于 MySQL 的分库场景.因此,我们需要配置多个数据源. ...
-
Spring Boot 揭秘与实战(二) 数据存储篇 - MySQL
文章目录 1. 环境依赖 2. 数据源3. 脚本初始化 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 4. 使用JdbcTemplate操作5. 总结 4.1. ...
-
Spring Boot 揭秘与实战(二) 数据缓存篇 - 快速入门
文章目录 1. 声明式缓存 2. Spring Boot默认集成CacheManager 3. 默认的 ConcurrenMapCacheManager 4. 实战演练5. 扩展阅读 4.1. Mav ...
-
Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache
文章目录 1. Redis Cache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 Redis Cache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存 ...
随机推荐
-
IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...
-
nodeType、nodeName和nodeValue
首先了解一下DOM中有三大节点,分别是 元素节点,文本节点,属性节点 元素节点:构成了DOM的基础.文档结构中,<html>是根元素,代表整个文档,其他的还有<head>,&l ...
-
MyBatis学习(二)、SQL语句映射文件(1)resultMap
二.SQL语句映射文件(1)resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyB ...
-
CSS3:flex布局应用
想把先前的整理的东西贴出来,怎奈总是有额外事情发生,额,教训电脑要离水杯远点~~ 推荐一本书,<编写可维护的Javascript>这是Nicbolas C.Zakas写的,他的<Ja ...
-
编绎OpenJDK
因为对于Java里的vtable,itable,有个地方还没搞明白,不得已去下个OpenJDK来研究下. 本来很不愿意去编绎OpenJDK,因为很有可能做的只是无用功,还有可能要去解决各种找不到链接库 ...
-
Instrumentation(1)
Instrumentation介绍: JavaInstrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序.这种监测和协助包括但不限于获取J ...
-
netty(八) netty中自带channelhandler
SslHandler:负责对请求进行加密和解密,是放在ChannelPipeline中的第一个ChannelHandler HttpClientCodec和HttpServerCodec:HttpCl ...
-
nginx的下载、编译安装和启动
一.nginx简介 nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器.nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
-
Excel获取第一个表名
Excel.Worksheet wsheet1 = (Excel.Worksheet)excelSql.Worksheets.get_Item(); wsheet1.Name获取sheet名称
-
ATOM常用插件推荐
转载:http://blog.csdn.net/qq_30100043/article/details/53558381 ATOM常用插件推荐 simplified-chinese-menu ATOM ...