1. 前提

网上学习Elasticsearch教程很多,但是有的不是那么完善,会有很多坑,做一些记录,方便后面自己查找,回顾。附上代码可以正常运行。

1. 使用版本

  • Elasticsearch: 7.9.1
  • Kibana: 7.9.1
  • elasticsearch-head-master

注:window上安装参考:windows安装es+kibana

2. 对比

mysql Elasticsearch
database Indices
Tables Types
rows Documents
columns Fields

3.常见问题

  1. 报错:Caused by: NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{192.168.1.105}{192.168.1.105:9300}]]
    这个问题就是版本不对,不管你怎么设置也好 ,始终就会出这个问题。
  • 版本对应关系
  1. Elasticsearch 和 kibana 版本要统一,不然无法启动
  2. 配置文件中的name 要和Elasticsearch 中 yml文件的cluster-name对应

2. 代码说明

代码是用了多种方式实现查询功能,感兴趣的朋友可以继续往下写

  1. 采用ElasticsearchRepository下的JPA实现查询功能,此方法不是很全,方法是继承ElasticsearchRepository<User, String>,然后写部分功能
  2. 采用SearchSourceBuilder实现查询
    步骤:

    • 构建查询条件
    • SearchSourceBuilder进行封装
    • 创建并设置SearchRequest对象,SearchRequest searchRequest = new SearchRequest("userindex); 匹配索引 如果不指定 自动匹配
    • client进行查询
    • 使用JSON转换成实体,User user = JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()), User.class);
  3. 自定义查询方式,方式灵活多样。包括多种查询,单一匹配,多匹配,范围查询等
  4. 测试用例:
{"id":1,"name":"张三","age":18,"description":"张三是java开发工程师","createtm": "2020-9-30 10:01:32"}
  1. 请求示例:
http://127.0.0.1:8281/test/searchByMoreUseSearch?searchContent=张

3. 具体代码

github地址:项目地址
pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>1.0.0</groupId><artifactId>springboot-elasticsearch</artifactId><version>0.0.1-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>6</source><target>6</target></configuration></plugin></plugins></build><packaging>jar</packaging><name>springboot-elasticsearch</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><springBoot>2.3.1.RELEASE</springBoot><jest.version>5.3.3</jest.version></properties><dependencies><!-- Spring Boot Elasticsearch 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>${springBoot}</version></dependency><!--Jest工具包   --><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>${jest.version}</version></dependency><!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${springBoot}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><version>${springBoot}</version></dependency><!-- Junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.54</version></dependency></dependencies>
</project>

controller

package com.rain.test.controller;import java.util.List;import com.rain.test.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.rain.test.service.UserService;/***
* @Title: UserRestController
* @Description:
* es基础学习
* @author Rain
* @date 2020年9月30日*/
@RestController
@RequestMapping(value = "/test")
public class UserRestController {@Autowiredprivate UserService userService;@PostMapping("/createUser")public boolean createUser(@RequestBody User user) {return userService.createUser(user);}@GetMapping("/searchAll")public List<User> searchAll() {return userService.searchAll();}@GetMapping("/searchContent")public List<User> searchContent(@RequestParam(value = "searchContent") String searchContent) {return userService.searchContent(searchContent);}@GetMapping("/searchByName")public List<User> searchByName(@RequestParam(value = "searchContent") String searchContent) {return userService.searchByName(searchContent);}@GetMapping("/searchByUserAge")public List<User> searchByUserAge(@RequestParam(value = "age") Integer age) {return userService.searchByUserAge(age);}@GetMapping("/searchByMoreUseQuery")public List<User> searchByMoreUseQuery(@RequestParam(value = "searchContent") String searchContent) {return userService.esSearchByMore(searchContent);}@GetMapping("/searchByMoreUseSearch")public List<User> searchByMoreUseSearch(@RequestParam(value = "searchContent") String searchContent) {return userService.searchByMoreUseSearch(searchContent);}@GetMapping("/searchByMoreContent")public List<User> searchByMoreContent(@RequestParam(value = "name") String name,@RequestParam(value = "description") String description) {return userService.searchByMoreContent(name, description);}@GetMapping("/searchByRange")public List<User> searchByRange(Integer age) {return userService.searchByRange(age);}}

dao

package com.rain.test.dao;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import com.rain.test.pojo.User;
import java.util.*;/*** @author Rain*/
public interface UserDao extends ElasticsearchRepository<User, String>{List<User> getAllBy();List<User> queryUserByAge(Integer age);
}

pojo

package com.rain.test.pojo;import java.io.Serializable;import org.springframework.data.elasticsearch.annotations.Document;/*** @author xiayu*/
@Document(indexName = "userindex", type = "user")
public class User implements Serializable{/*** */private static final long serialVersionUID = 1L;/** 编号 */private String id;/** 姓名 */private String name;/** 年龄 */private Integer age;/** 描述 */  private String description;/** 创建时间 */private String createtm;public User(){}public User(String id, String name, Integer age, String description, String createtm) {super();this.id = id;this.name = name;this.age = age;this.description = description;this.createtm = createtm;}/**  * 获取编号  * @return  id  */public String getId() {return id;}/**  * 设置编号  * @param  id*/public void setId(String id) {this.id = id;}/**  * 获取姓名  * @return  name  */public String getName() {return name;}/**  * 设置姓名  * @param  name*/public void setName(String name) {this.name = name;}/**  * 获取年龄  * @return  age  */public Integer getAge() {return age;}/**  * 设置年龄  * @param  age*/public void setAge(Integer age) {this.age = age;}/**  * 获取描述  * @return  description  */public String getDescription() {return description;}/**  * 设置描述  * @param description*/public void setDescription(String description) {this.description = description;}/**  * 获取创建时间  * @return  createtm  */public String getCreatetm() {return createtm;}/**  * 设置创建时间  * @param createtm*/public void setCreatetm(String createtm) {this.createtm = createtm;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + ", description=" + description + ", createtm="+ createtm + "]";}}

service

package com.rain.test.service;import java.util.List;import com.rain.test.pojo.User;/***
* Title: UserService
* @author Rain
* @date 2020年9月30日*/
public interface UserService {/*** 新增用户信息** @param user* @return*/boolean createUser(User user);/*** 根据关键字进行全文搜索* @param searchContent* @return*/List<User> searchContent(String searchContent);/*** 查询全部** @return*/List<User> searchAll();/*** 根据关键词权重进行查询* @param searchContent* @return*/List<User> searchByName(String searchContent);/*** 年龄查询** @param age* @return*/List<User> searchByUserAge(Integer age);/*** 多条件查询** @param searchContent* @return*/List<User> esSearchByMore(String searchContent);/*** 多条件匹配查询** @param name* @param description* @return*/List<User> searchByMoreContent(String name, String description);/*** 使用searchSource多匹配查询** @param searchContent* @return*/List<User> searchByMoreUseSearch(String searchContent);/*** 根据范围查询** @param age* @return*/List<User> searchByRange(Integer age);
}

sevice Impl

package com.rain.test.service.impl;import java.io.IOException;
import java.util.List;import com.alibaba.fastjson.JSON;
import com.rain.test.dao.UserDao;
import com.rain.test.pojo.User;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.*;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.google.common.collect.Lists;
import com.rain.test.service.UserService;
import java.util.*;/*** @author Rain*/
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Autowiredprivate RestHighLevelClient client;@Overridepublic boolean createUser(User user) {boolean flag = false;try{userDao.save(user);flag=true;}catch(Exception e){e.printStackTrace();}return flag;}@Overridepublic List<User> searchContent(String searchContent) {QueryStringQueryBuilder builder = new QueryStringQueryBuilder(searchContent);System.out.println("查询的语句:"+builder);Iterable<User> searchResult = userDao.search(builder);List<User> list= Lists.newArrayList(searchResult);return list;}@Overridepublic List<User> searchAll() {return userDao.getAllBy();}@Overridepublic List<User> searchByName(String searchContent) {FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(QueryBuilders.matchQuery("name", searchContent));System.out.println("查询的语句:" + functionScoreQueryBuilder.toString());Iterable<User> searchResult = userDao.search(functionScoreQueryBuilder);List<User> list= Lists.newArrayList(searchResult);return list;}@Overridepublic List<User> searchByUserAge(Integer age) {return userDao.queryUserByAge(age);}@Overridepublic List<User> esSearchByMore(String searchContent) {// 多个匹配MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(searchContent, "name", "description");System.out.println("查询的语句:" + multiMatchQueryBuilder.toString());Iterable<User> searchResult = userDao.search(multiMatchQueryBuilder);return Lists.newArrayList(searchResult);}@Overridepublic List<User> searchByMoreContent(String name, String description) {BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("name", name)).must(QueryBuilders.termQuery("description", description));Iterable<User> userIterable = userDao.search(queryBuilder);return Lists.newArrayList(userIterable);}@Overridepublic List<User> searchByMoreUseSearch(String searchContent) {MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(searchContent, "name", "description");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(multiMatchQueryBuilder);// 创建并设置SearchRequest对象// SearchRequest searchRequest = new SearchRequest("userindex); 匹配索引 如果不指定 自动匹配SearchRequest searchRequest = new SearchRequest();searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = null;try {searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}ArrayList<User> userList = new ArrayList<>();for (SearchHit hit : searchResponse.getHits().getHits()) {User user = JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()), User.class);userList.add(user);}return userList;}@Overridepublic List<User> searchByRange(Integer age) {//包括下界 包括上界RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").from(20).to(age).includeLower(true).includeUpper(false);Iterable<User> userIterable = userDao.search(rangeQueryBuilder);return Lists.newArrayList(userIterable);}
}

启动类

package com.rain.test;import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootVersion;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.SpringVersion;/*** @author Rian*/
@SpringBootApplication
public class ElasticSearchApp
{public static void main( String[] args ){// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件SpringApplication.run(ElasticSearchApp.class, args);System.out.println("ElasticSearch 程序正在运行...");String version = SpringVersion.getVersion();String version1 = SpringBootVersion.getVersion();System.out.println(version);System.out.println(version1);}
}

配置文件


server:port: 8281spring:banner:charset: utf-8application:name: springboot2-elasticsearchhttp:encoding:charset: utf-8enabled: trueforce: truemessages:encoding: UTF-8data:elasticsearch:repositories:enabled: truecluster-nodes: localhost:9300cluster-name: my-application

springboot+elasticsearch 基本使用相关推荐

  1. 聊聊springboot elasticsearch healthIndicator

    序 本文主要研究一下springboot elasticsearch healthIndicator ElasticsearchHealthIndicatorProperties spring-boo ...

  2. springboot+elasticsearch+bboss框架集成遇到的坑

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.为什么要用bboss? 二.遇到的坑 1.kibana.head页面查询结果不一致 2.head查询结果与bbos ...

  3. springboot+elasticsearch+neo4j+vue+activiti数字知识库管理系统

    文章目录 前言 一.项目概要 二.相关技术点 1.富文本编辑器 2.全文检索 3.知识图谱 4.工作流 总结 前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编 ...

  4. SpringBoot Elasticsearch

    文章目录 Windwos Elasticsearch Elasticsearch 基本介绍 Elasticsearch 6.8.5 单机安装 kibana6.8.5 可视化工具 Springboot ...

  5. SpringBoot Elasticsearch组合查询封装

    最近项目组需要用到Elasticsearch,封装了ESQueryBuilder方便条件组合,结合ES工具类使用效果更佳,下面是ES工具类传送门: SpringBoot Elasticsearch工具 ...

  6. springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions

    springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions 问题场景 在将Timestamp类型存进Elasticsearc后,将其取 ...

  7. springboot + elasticsearch

    tips: 上一篇文章我们整合了springboot 与kafka,细心的童鞋可能已经发现了我们使用的springboot版本为最新的2.0.0,同样spring-kafka也为最新的版本2.1.4, ...

  8. SpringBoot ElasticSearch 全文搜索

    2019独角兽企业重金招聘Python工程师标准>>> 一.pom.xml配置 SpringBoot版本1.5.6https://blog.csdn.net/kingice1014/ ...

  9. springboot+Elasticsearch实现word,pdf,txt内容抽取并高亮分词全文检索

    文章目录 需求 一.环境 二.功能实现 1.搭建环境 2.文件内容识别 三.代码 需求 产品希望我们这边能够实现用户上传PDF,WORD,TXT之内得文本内容,然后用户可以根据附件名称或文件内容模糊查 ...

  10. SpringBoot+Elasticsearch实现过程

    前言: 最近因为工作中用到Elasticsearch,之前没接触过,所以学习了一下Elasticsearch搜索引擎,自己在本地搭建了一下过程,记录一下. 首先我查了一下springBoot版本和El ...

最新文章

  1. callable object与新增的function相关 C++11中万能的可调用类型声明std::function...
  2. c++多元线性回归_五种优化算法实现多元线性回归
  3. NIO:channel、buffer、状态变量、socket、charset
  4. 关于常用meta的总结
  5. js清除添加的下拉框html,Html下拉框的定义以及JS、Jquary取值、添加和移除
  6. python如何生成随机数_python如何生成随机数
  7. clang mingw
  8. 数据挖掘概念与技术_文本挖掘
  9. matlab 自带例子,matlab自带各种分类器的使用示例
  10. ulli中自定义属性后取值的问题
  11. 云台山网络营销计划_山东云台山两日游|网络营销职业规划范文
  12. sle4442,sle4428解
  13. 山东省第八届acm大赛 G题 (SDUT 3899)
  14. 计算机混合运算java,大话Java混合运算规则
  15. html5仿ios底部菜单栏,仿苹果电脑任务栏菜单
  16. 网络编程学习_TCP协议
  17. python学习笔记--Dictionary
  18. Python人脸识别项目-人脸检测
  19. 通达信指标转python_通达信转python
  20. Google天气和股票API

热门文章

  1. (DDIA)SQL与NoSQL数据模型简介
  2. 管理信息系统复试——三、管理信息系统战略规划与开发方法
  3. Awesome Crowd Counting
  4. Vue项目-手机app瑞幸咖啡详解(全网最细) 从脚手架搭建到前后端数据交互(二)
  5. 【Unity】跨场景音乐资源不间断播放(可控音量)
  6. 读书笔记:“Python Programming: An Introduction to Computer Science”
  7. 用友t3服务器系统管理软件,T3用友通系统管理常见问题及解决方案
  8. 使用PMOS管构建电源延时供电电路
  9. firefox关于about:config的常用配置
  10. 饭菜先生推出首款可随心定制的电子菜谱