5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good

本节讲解SpringBoot与Spring-data-elasticsearch整合的入门案例。

一、环境搭建

新建maven项目,名字随意

pom.xml

  1.         <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.3.1.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-web</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-test</artifactId>
  18. </dependency>
  19. </dependencies>

application.yml

  1. spring: 
  2.      data:
  3.         elasticsearch: #ElasticsearchProperties
  4.             cluster-name: elasticsearch #默认即为elasticsearch
  5.             cluster-nodes: 120.25.194.233:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode

这些配置的属性,最终会设置到org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties这个实体中。

二、创建实体

Spring-data-elasticsearch为我们提供了@Document@Field等注解,如果某个实体需要建立索引,只需要加上这些注解即可。例如以一个文章实体为例:

Article.java

  1. import java.io.Serializable;
  2. import java.util.Date;
  3.  
  4. import org.springframework.data.annotation.Id;
  5. import org.springframework.data.elasticsearch.annotations.DateFormat;
  6. import org.springframework.data.elasticsearch.annotations.Document;
  7. import org.springframework.data.elasticsearch.annotations.Field;
  8.  
  9. @Document(indexName="article_index",type="article",shards=5,replicas=1,indexStoreType="fs",refreshInterval="-1")
  10. public class Article implements Serializable{
  11. /**
  12.  * 
  13.  */
  14. private static final long serialVersionUID = 551589397625941750L;
  15. @Id
  16. private Long id;
  17. /**标题*/
  18. private String title;
  19. /**摘要*/
  20. private String abstracts;
  21. /**内容*/
  22. private String content;
  23. /**发表时间*/
  24. @Field(format=DateFormat.date_time,index=FieldIndex.no,store=true,type=FieldType.Object)
  25. private Date postTime;
  26. /**点击率*/
  27. private Long clickCount;
  28. //setters and getters
  29. //toString
  30. }

在需要建立索引的类上加上@Document注解,即表明这个实体需要进行索引。其定义如下:

  1. @Persistent
  2. @Inherited
  3. @Retention(RetentionPolicy.RUNTIME)
  4. @Target({ElementType.TYPE})
  5. public @interface Document {
  6.  
  7. String indexName();//索引库的名称,个人建议以项目的名称命名
  8.  
  9. String type() default "";//类型,个人建议以实体的名称命名
  10.  
  11. short shards() default 5;//默认分区数
  12.  
  13. short replicas() default 1;//每个分区默认的备份数
  14.  
  15. String refreshInterval() default "1s";//刷新间隔
  16.  
  17. String indexStoreType() default "fs";//索引文件存储类型
  18. }

加上了@Document注解之后,默认情况下这个实体中所有的属性都会被建立索引、并且分词。

我们通过@Field注解来进行详细的指定,如果没有特殊需求,那么只需要添加@Document即可。在我们的案例中,使用了@Field针对日期属性postTime上进行了指定。

@Field注解的定义如下:

  1. @Retention(RetentionPolicy.RUNTIME)
  2. @Target(ElementType.FIELD)
  3. @Documented
  4. @Inherited
  5. public @interface Field {
  6.  
  7. FieldType type() default FieldType.Auto;#自动检测属性的类型
  8.  
  9. FieldIndex index() default FieldIndex.analyzed;#默认情况下分词
  10.  
  11. DateFormat format() default DateFormat.none;
  12.  
  13. String pattern() default "";
  14.  
  15. boolean store() default false;#默认情况下不存储原文
  16.  
  17. String searchAnalyzer() default "";#指定字段搜索时使用的分词器
  18.  
  19. String indexAnalyzer() default "";#指定字段建立索引时指定的分词器
  20.  
  21. String[] ignoreFields() default {};#如果某个字段需要被忽略
  22.  
  23. boolean includeInParent() default false;
  24. }

需要注意的是,这些默认值指的是我们没有在我们没有在属性上添加@Filed注解的默认处理。一旦添加了@Filed注解,所有的默认值都不再生效。此外,如果添加了@Filed注解,那么type字段必须指定。

 

三 创建Repository

我们只要编写一个接口ArticleSearchRepository,来继承Spring-data-elasticSearch提供的ElasticsearchRepository即可。

  1. import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
  2.  
  3. import spring.data.elasticsearch.docs.Article;
  4.  
  5. //泛型的参数分别是实体类型和主键类型
  6. public interface ArticleSearchRepository extends ElasticsearchRepository<Article, Long>{
  7.  
  8. }

四、编写测试类

1、测试自动创建mapping

ArticleSearchRepositoryTest.java

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringApplicationConfiguration(classes=Application.class)
  3. public class ArticleSearchRepositoryTest {
  4.  
  5. @Autowired
  6. private ArticleSearchRepository articleSearchRepository;
  7. @Test
  8. public void test(){
  9. System.out.println("演示初始化");
  10. }
  11.  
  12. }

这个测试仅仅是为了演示应用启动后,Spring-data-elasticSearch会自动帮我们建立索引库和创建实体的mapping信息。

当成功启动之后,通过sense控制台查看映射信息

QQ截图20160317013610.png

可以右边的结果中,的确出现了article的,mapping信息。

默认情况下,在创建mapping信息的时候,只会创建添加了@Field注解的mapping信息。其他没有添加@Filed注解的字段在保存索引的时候自动确定。

需要注意的是,mapping信息可以自动创建,但是不能自动更新,也就是说,如果需要重新进行mapping映射的话,需要将原来的删除,再进行mapping映射。读者可以尝试一下将postTime的type改为FieldType.long,这种情况下,会自动将日期转换成时间戳。但是mapping信息不会自动更新,必须将原有的mapping信息删除之后,才能重新建立映射。

2、测试保存

  1. @Test
  2. public void testSave(){
  3. Article article=new Article();
  4. article.setId(1L);
  5. article.setTitle("elasticsearch教程");
  6. article.setAbstracts("spring-data-elastichSearch");
  7. article.setContent("SpringBoot与spring-data-elastichSearch整合");
  8. article.setPostTime(new Date());
  9. article.setClickCount(100l);
  10. articleSearchRepository.save(article);
  11. }

运行程序后,我们首先查看mapping信息有没有自动创建

QQ截图20160317014727.png

此时查看创建的索引结果

QQ截图20160317014853.png

http://www.tianshouzhi.com/api/tutorials/elasticsearch/159

限定查询结果集大小

Spring Data允许开发者使用firsttop关键字对返回的查询结果集大小进行限定。fisrt和top需要跟着一个代表返回的结果集的最大大小的数字。如果没有跟着一个数字,那么返回的结果集大小默认为1。

Example 8.Limiting the result size of query with Top and First(利用first和top限制返回的结果集大小)

User findFirstByOrderByLastnameAsc();User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); Slice<User> findTop3ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable); 

限制结果集的表达式还支持Distinct关键字。并且,当返回的结果集大小限制为1时,Spring Data支持将返回结果包装到Optional(java 8新增,这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象)之中,例子如下:

Optional<User> findFirstByOrderByLastnameAsc();

在查询用page和slice来进行分页查询的情况下,同样可以使用firsttop来对结果集大小进行限制。

+

 

注意,如果在使用Sort参数对查询结果进行排序的基础上加上对结果集大小的限制,就可以轻易的获得最大的K个元素或最小的K个元素。

 

https://es.yemengying.com/4/4.4/4.4.5.html

 

转载于:https://www.cnblogs.com/softidea/p/6102796.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小组是什么意思_生猪期货什么时候上市?相关企业如何参与生猪期货

2020年4月生猪期货已获中国证监会批准&#xff0c;7月份大连商品交易所开展生猪期货仿真交易&#xff0c;这个期待许久的新品种上市脚步声越来越近&#xff0c;而市场各方的关注度也日益提升。同时&#xff0c;期货公司也在积极备战&#xff0c;为需要申请交割库的实体企业提供…

iNeuOS工业互联网操作系统,在航天和军工测控领域的应用

目 录1. 行业概述... 22. 解决方案... 23. 解决的痛点... 61. 行业概述现在国际形势异常严峻&#xff0c;加大了偶发武装斗争的可能性。航天和军工领域的数字化转型和建设正在积极推进&#xff0c;在与航天二院、航天三院、航天六院、航天九院、无线电厂…

[vite] Failed to load source map for */*.css|.js

打开提示的文件&#xff0c;删除 “sourceMappingURL”这一行即可

PerfView专题 (第九篇):洞察 C# 中的 LOH 内存碎片化

一&#xff1a;背景 在 内存泄漏 的系列问题中&#xff0c;有一类问题是 内存碎片化 导致的&#xff0c;而且这种更容易发生在 LOH 上&#xff0c;因为它默认不开启 对象压缩&#xff0c;一般遇到这种情况&#xff0c;优先让朋友执行下面的代码应急。GCSettings.LargeObjectHea…

HSV色彩空间

转自原文 HSV色彩空间 理解HSV色彩空间&#xff1a; HSV颜色模式是除了RGB颜色模式之外的另一种流行的颜色模式&#xff0c;RGB被广泛运用于计算机中&#xff0c;而HSV则用在电视显示方面。它更符合人们对颜色的描述(什么颜色(H)&#xff0c;深浅度如何(S)&#xff0c;亮度如…

java随机抽题系统_为什么要使用考试系统的随机组卷功能?

一个考试系统的组卷灵活性&#xff0c;不仅仅在于其题型丰富、设置参数齐全&#xff0c;也在于抽题组卷方式。除了平时我们严肃性的固定题目出卷方式&#xff0c;我们往往也考虑到需要随机组卷的功能。为什么用户会需要随机组卷的功能呢&#xff1f;随机组卷功能有什么用处&…

frameset在html5下用什么代替_速速围观!冬至吃货地图来啦~蚌埠的吃货们,你们今天吃什么?...

中国传统二十四节日冬农历十一月初七至冬至&#xff0c;又称日短至、冬节、亚岁等&#xff0c;兼具自然与人文两大内涵&#xff0c;既是二十四节气中一个重要的节气&#xff0c;也是中国民间的传统节日&#xff0c;被视为冬季的大节日。我们迎来了冬至节气&#xff0c;真正的隆…

QuillEditor 图片添加缩放功能

安装插件 npm install --save quill-blot-formatter 使用&#xff1a; 添加 :modules"modules" <template><QuillEditorref"refEditor"theme"snow":toolbar"toolbarOptions"contentType"html"enable:content…

Servlet 应用程序事件、监听器

Web容器管理Servlet/JSP相关的生命周期&#xff0c;若对HttpServletRequest对象、HttpSession对象、ServletContxt对象在生成、销毁或相关属性设置发生的时机点有兴趣&#xff0c;可以实现对应的监听器(Listener)。 一、ServletContext事件、监听器 与ServletContext相关的监听…

巴川数据科学炼成记_智橡树智能英语好不好有哪些功能?提出的科学学习思想是什么?...

智橡树智能英语与真人老师英语教学的最大区别就是解决老师课堂上不擅长、学生课后难坚持的单词、听力、口语、阅读重复训练问题&#xff0c;是辅助老师课堂教学的最佳搭档&#xff01;智橡树智能英语基于人工智能及大数据技术&#xff0c;专注音标、单词、听力、阅读、语法、口…

vite解决警告: You are running the esm-bundler build of vue-i18n. It is recomme

(转载请删除括号里的内容) 解决方法&#xff1a;在vite.config.js加入以下代码 resolve: { alias: {vue-i18n: vue-i18n/dist/vue-i18n.cjs.js} }--------------------- 作者&#xff1a;BY_BC 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/BY_BC/article…

设计师要懂布局(一)

2019独角兽企业重金招聘Python工程师标准>>> 页面版式的好坏给了用户第一印象&#xff0c;好不好用&#xff0c;想不想看页面的内容&#xff0c;要不要收藏这个页面&#xff0c;在设计中都起到了决定性作用。 在互联网时代&#xff0c;我们接触最多的就是手机和电脑…

ES6入门之Symbol

ES5对象属性名都是字符串容易造成属性名的冲突。 eg:var a { name: lucy};a.name lili;这样就会重写属性 ES6引入了一种新的原始数据类型Symbol&#xff0c;表示独一无二的值。 重新复习下新知识&#xff1a;基本数据类型有6种&#xff1a;Undefined、Null、布尔值&#xff0…

mac safari无法连接服务器_宇航员乘坐SpaceX飞船返航中iPad上Safari出现“无法连接到网络”错误...

罗伯特贝恩肯(Robert Behnken)和道格拉斯赫尔利(Douglas Hurley)在完成轨道实验室任务后&#xff0c;于今天搭乘 SpaceX 公司的"Crew Dragon"飞船离开国际空间站&#xff0c;为他们历史性的国际空间站飞行画上句号。两名宇航员在位于美国德克萨斯州休斯顿和加利福尼亚…

Vue 大量数据展示卡顿解决方案(长列表优化)

需求分析&#xff08;长列表展示&#xff09; 页面某处需要渲染 1w 条数据&#xff0c;并需要滚动展示&#xff0c;这时如果直接把这些数据渲染到页面上&#xff0c;会导致系统内存大量被占用&#xff0c;导致页面卡顿或崩溃 我们都知道&#xff0c;每次 DOM 修改&#xff0c;浏…

Django-admin管理工具

admin组件使用 Django 提供了基于 web 的管理工具。 Django 自动管理工具是 django.contrib 的一部分。你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它&#xff1a; # Application definitionINSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contr…

[转]mysql的sql优化工具

原标题&#xff1a;DBA的五款最佳SQL查询优化工具&#xff0c;收藏了 一般来说&#xff0c;SQL查询优化器分析给定查询的许多选项&#xff0c;预估每个选项的成本&#xff0c;最后选择成本最低的选项。如果查询优化器选择了错误的计划&#xff0c;则性能差异可能从几毫秒到几分…

.NET 7 中的 HttpResult 接口

.NET 7 中的 HttpResult 接口Intro在前面的文章中&#xff0c;我们提到了 .NET 7 引入了 Endpoint Filter 来支持 Endpoint 的过滤器&#xff0c;有了这个接口就想着把之前的统一 API response 的 filter 改造一下支持 endpoint filter&#xff0c;然而这个一直等到了 .NET 7 P…

5、Hive的自定义UDF函数

2019独角兽企业重金招聘Python工程师标准>>> 1、pom.xml引入依赖及打包 <dependencies><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></depende…

多线程-单生产单消费模型

2019独角兽企业重金招聘Python工程师标准>>> 创建资源对象&#xff0c;提供保存和取出方法&#xff08;使用synchronized代码块实现&#xff09; /*** Created by shaoqinghua on 2018/5/3.* 定义一个负责保存和取出的资源类*/ public class Resource {/*** 定义成员…