一、介绍
- 简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET (C#)、PHP、Python、Apache Groovy、Ruby 和许多其他语言中都是可用的。
根据DB-Engines的排名显示,Elasticsearch是 最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。 - elasticSearch特点和使用场景
1、 全文检索,结构化检索,数据统计、分析,接近实时处理,分布式搜索(可部署数百台服务器),处理TB、PB级别的数据搜索纠错等;
2、 使用场景:日志搜索,数据聚合,数据监控,报表统计分析;
3、 国内使用:维基百科,Stack Overflow, GitHub。
二、安装
- 官方文档
- 在window下的安装
下载7.6版本 ,直接加压到非中文硬盘。D:\Program Files\elasticsearch-7.6.0\bin双击elasticsearch.bat 启动es7.6。 会提示需安装JDK11, 下载安装JDK11即可。 - 启动后,浏览器输入:localhost:9200 看到如下信息代表成功。信息见备注
- 一般情况下,我们都会通过一个可视化的工具来查看ES的运行状态和数据。这个工具我们一般选择head 。
该插件依赖notejs ,下载地址:notejs下载地址 安装很简单,一路下一步。
nodejs安装完毕后,cmd输入:node --version 能看到版本信息,代表安装成功。 - 进入nodejs安装目录
- 以上所有head的依赖都安装完毕,下面安装head
head下载地址 - 解压到非中文路径,然后cmd进入该路径,通过命令行安装:npm install 执行安装,此安装过程非常缓慢。
启动命令:npm run start
- 启动后,在浏览器输入:http://localhost:9100/
- 发现连接状态未连接,因为es默认不允许跨域访问,需手动开启,比如路径:
D:\Program Files\elasticsearch-7.6.0\config
用文本编辑器打开elasticsearch.yml
注意: 添加一下内容时,要注意 冒号后面的 值 的前后要有空格
- 重启es 刷新elasticsearch-head
- 如果重启es 发现闪退,需修改es安装包下:/config/jvm.options可以将JVM参数改小
-Xms512M -Xmx512M
三、ElasticSearch简单测试
- 参考文档
- 集群运行状况
- 测试接口
查看集群状态:localhost:9200/_cat/health?v
查看索引列表:localhost:9200/_cat/indices?v - 创建索引参考文档
创建索引接口:localhost:9200/customer?pretty 提交方式是put - 再次查看索引,可以看到内容:localhost:9200/_cat/indices?v
6. 索引中存放数据参考文档
向索引中添加数据:put提交,提交参数为json数据,需选择Body–raw–json,否则提交报错406
- 通过get提交查看刚才添加到索引的数据。
localhost:9200/customer/external/1?pretty
四、整合elasticsearch
- spring-data-elasticsearch介绍
- idea搭建springboot工程
- application.properties 配置
参考文档 - 实体类配置
/** * 用户实体类 */ @Document(indexName = "user",type = "info") public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
- dao层
继承ElasticsearchRepository
/** * user的持久层,继承了ElasticsearchRepository */ @Repository public interface UserRepository extends ElasticsearchRepository<User,Integer> { }
- controller层
使用了一个工具类JsonData,转成json字符串@RestController @RequestMapping("/user/info") public class UserController { @Autowired private UserRepository repository; //1.保存数据到索引 @GetMapping("/save") public Object save(){ User user = new User(); user.setId(2); user.setName("张三"); user.setAge(21); repository.save(user); return JsonData.buildSuccess(); } //2.从索引检索数据 @GetMapping("/search") public Object search(String name){ QueryBuilder builder = QueryBuilders.matchQuery("name",name); Iterable<User> list = repository.search(builder); return JsonData.buildSuccess(list); } }
- 测试