Springboot集成spring data elasticsearch过程详解

版本对照

各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/

1、在application.yml中添加配置

spring:
 data:
  elasticsearch:
   repositories:
    enabled: true
   #多实例集群扩展时需要配置以下两个参数
   #cluster-name: datab-search
   #cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301  

  2、添加 Maven 依赖  

<!---开箱即用,版本默认和springboot版本对应-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  </dependency>

3、建立实体entity
注解说明:  

  Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

  •   @Document 作用在类,标记实体类为文档对象,一般有两个属性

    •     indexName:对应索引库名称
    •     type:对应在索引库中的类型
    •     shards:分片数量,默认5
    •     replicas:副本数量,默认1
  •   @Id 作用在成员变量,标记一个字段作为id主键
  •   @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
    •     type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
    •     text:存储数据时候,会自动分词,并生成索引
    •     keyword:存储数据时候,不会分词建立索引
    •     Numerical:数值类型,分两类
      •       基本数据类型:long、interger、short、byte、double、float、half_float
      •       浮点数的高精度类型:scaled_float
      •       需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  •     Date:日期类型
  •       elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
  •     index:是否索引,布尔类型,默认是true
  •     store:是否存储,布尔类型,默认是false
  •     analyzer:分词器名称,这里的ik_max_word即使用ik分词器

  示例:

@Document(indexName = "cp_doc", type = "doc", shards = 10, replicas = 0)
public class CpDocument extends BaseEntity {

  @Id//作用在成员变量,标记一个字段作为id主键
  private long id ;
  @Field(type = FieldType.Text)
  private String name ;
  @Field(type = FieldType.Text)
  private String address ;
  public long getId() {
  return id;
  }
  public void setId(long id) {
  this.id = id;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getAddress() {
  return address;
  }
  public void setAddress(String address) {
  this.address = address;
}

 4、编写 Repository 访问层 

/**
 * 基本操作repository-curd
 * @author 滚动的蛋
 *
 */
public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> {
}

  5、创建索引+查询示例 

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
  @Autowired
   CpRepository cpRepository;
  @Autowired
  ElasticsearchTemplate elsTemplate;//ElasticsearchTemplate中提供了创建索引的API<br data-filtered="filtered"><br data-filtered="filtered">
  @Test
  public void addIndexTest() {
    //创建索引
    boolean indexRes = elsTemplate.createIndex(CpDocument.class);
    System.out.println("======创建索引结果:"+indexRes+"=========");
    //添加索引
    CpDocument cpTest = new CpDocument();
    cpTest.setId(1);
    cpTest.setName("阿里巴巴");
    cpTest.setAddress("北京路12号");
    cpRepository.save(cpTest);
  }

  @Test
  public void srarchTest() {
    //这个只做一个多字段的匹配查询示例,其它的可以查看API文档使用
    //"name","address" 为匹配的字段
     MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("阿里巴巴","address","name");//多字段匹配QueryBuilder
     SearchQuery searchQuery = new NativeSearchQueryBuilder()//构建查询对象
         .withQuery(multiMatchQuery)
         .withIndices("cp_doc")//索引名
         .withPageable(PageRequest.of(0, 10))//分页
         .build();
     Iterable<CpDocument> productDtos = cpRepository.search(searchQuery);
     ArrayList<CpDocument> CpDocuments = Lists.newArrayList(productDtos);
     for (CpDocument cpDocument : CpDocuments) {
      System.out.printf("企业名称:%s,企业地址:%s\n",cpDocument.getName(),cpDocument.getAddress());
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-03-29

springboot使用@data注解减少不必要代码

一.idea安装lombok插件 二.重启idea 三.添加maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 四.书写一个实体类 import lombok.Data; @Data public cla

SpringBoot使用编程方式配置DataSource的方法

Spring Boot使用固定算法来扫描和配置DataSource.这使我们可以在默认情况下轻松获得完全配置的DataSource实现. Spring Boot还会按顺序快速的自动配置连接池(HikariCP, Apache Tomcat或Commons DBCP),具体取决于路径中的哪些类. 虽然Spring Boot的DataSource自动配置在大多数情况下运行良好,但有时我们需要更高级别的控制,因此我们必须设置自己的DataSource实现,因此忽略自动配置过程. Maven依赖 总体而

SpringBoot Data JPA 关联表查询的方法

SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店Store中所有的商品Shop,商店对商品一对多,商品对商店多对一,外键 store_id存在于多的一方.使用数据库的内连接语句. 表结构 tb_shop tb_store 实体类,通过注解实现 1.商店类Store.java package com.gaolei.Entity; import ja

Spring Boot 自定义数据源DruidDataSource代码

这篇文章主要介绍了Spring Boot 自定义数据源DruidDataSource代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.添加依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.26</version> </depend

SpringBoot整合Spring Data Elasticsearch的过程详解

Spring Data Elasticsearch提供了ElasticsearchTemplate工具类,实现了POJO与elasticsearch文档之间的映射 elasticsearch本质也是存储数据,它不支持事物,但是它的速度远比数据库快得多, 可以这样来对比elasticsearch和数据库 索引(indices)--------数据库(databases) 类型(type)------------数据表(table) 文档(Document)---------------- 行(ro

Spring Boot整合Spring Data Jpa代码实例

一.Spring Data Jpa的简介 spring data:其实就是spring 提供的一个操作数据的框架.而spring data JPA 只是spring data 框架下的一个基于JPA标准操作数据的模块. spring data jpa :基于JPA的标准对数据进行操作.简化操作持久层的代码,只需要编写接口就可以,不需要写sql语句,甚至可以不用自己手动创建数据库表. 二.添加依赖 <!--添加springdatajpa的依赖--> <dependency> <

解决springboot 获取form-data里的file文件的问题

解决springboot 获取form-data里的file文件的问题 前言: 这两天用 springboot 和同事的 iOS 客户端上传文件对接.在客户端他使用的是 afnetworking 第三方库.我使用的是 springboot 集成的 StandardMultipartHttpServletRequest 的解析方式. 写好服务器端的接口以后,使用 postman 模拟 form-data 混合上传普通文本数据和 file 文件是没问题的.后来再 iOS 端混合上传文本和 file

解决SpringBoot打成jar运行后无法读取resources里的文件问题

开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下 在开发环境中通过下面方法能读取word_replace_tpl.docx文件,但是打成jar包在 linux下运行后无法找到文件了 File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/office_template/xxx.docx&q

解决layui的form里的元素进行动态生成,验证失效的问题

这问题和使用layTpl动态生成页面问题类似,详细进入https://www.jb51.net/article/170000.htm form有点不同就是需要把需要执行form.render()而不是element.render():进行渲染 var data = jsonData; var getTpl = dialogTemplate.innerHTML, view = document.getElementById('dialogContent'); laytpl(getTpl).rend

Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法

本文实例讲述了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法.分享给大家供大家参考,具体如下: HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中.通过chrome的开发者工具可以看到如下(这里是可读的形式,不是真正的HTTP请求协议的请求格式)

Vue(定时器)解决mounted不能获取到data中的数据问题

vue中data定义 data() { return { isok:10, } } 在vue中使用定时器 如下 mounted是钩子函数 mounted(){ console.log(this.isok) //能获取isok 10 setInterval(function(){ console.log(this.isok) //不能获取 isok }, 3000); } 这是为什么呢? 原因就是:定时器的this是指向 window的. 那有什么方法来解决这个问题呢?答案是有的,两种 第一种:

javascript获取form里的表单元素的示例代码

//获取form对象 var form=document.getElementById('my_form'); //用户名input对象 user_name是对象的name属性 var userName=form.user_name; //用户名清空 userName.value=''; //用户密码input对象 password是对象的name属性 var password=form.password; //用户密码清空 password.value=";

Python3实现获取图片文字里中文的方法分析

本文实例讲述了Python3实现获取图片文字里中文的方法.分享给大家供大家参考,具体如下: 一.运行环境 (1) win10 (2) pycharm (3) python 3.5 (4) pillow与pytesseract库安装: pip3 install pillow pip3 install pytesseract (5)  识别引擎tesseract-ocr ,下载之后解压安装,下载地址:https://www.jb51.net/softs/538925.html 二. 运行代码 # -

SpringBoot集成Spring Data JPA及读写分离

相关代码: github OSCchina JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理Java应用中的关系数据.它包括以下几方面的内容: 1.ORM映射 支持xml和注解方式建立实体与表之间的映射. 2.Java持久化API 定义了一些常用的CRUD接口,我们只需直接调用,而不需要考虑底层JDBC和SQL的细节. 3.JPQL查询语言 这是持久化操作中很重要的一个方面,通过面向对象

springboot获取URL请求参数的多种方式

1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @param username * @param password * @return */ @RequestMapping("/addUser1") public String addUser1(String username,String password) { System.out.pri

解决django中form表单设置action后无法回到原页面的问题

django中form表单设置action后,点提交按钮是跳转到action页面的,比如设置action为login,网址为192.168.1.128,跳转后便会来到192.168.1.128/login,F5刷新也会是重新提交表单对话框,无法回到原页面. 因此就要在django服务器进行重定向,具体就是 from django.shortcuts import redirect #最后返回原页面 return redirect(url) 补充知识:Django + Ajax发送POST表单,并