提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
一、ElasticSearch相关概念
1. 基本概念
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。 然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对 文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
用Mysql这样的数据库存储就会容易想到建立一张User表,有很多的字段等,在Elasticsearch里这就是一个文档,当然这个文档会属于一个User的类型,各种各样的类型存在于一个索引当中。
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
2. ElasticSearch有什么用?
ElasticSearch在速度和扩展性上方面都表现出色, 而且还能够索引多种类型的内容, 这意味着其可用于多种用例:
- 应用程序搜索
- 网站搜索
- 企业搜索
- 日志处理和分析
- 基础设施指标和容器检测
- 地理空间数据分析和可视化
- 安全分析
- 业务分析
二、ElasticSearch安装
本项目中使用Docker安装
1. docker镜像下载
docker pull elasticsearch:5.6.8
2. 安装es容器
docker run -di --name=es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
9200端口(Web管理平台端口) 9300(服务默认端口)
浏览器输入地址访问: http://110.42.216.234:9200 (注意: 请修改成自己的虚拟机ip)
3. 开启远程连接
上面完成安装后,es并不能正常使用,elasticsearch从5版本以后默认不开启远程连接,程序直接连接会报如下错误:
failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{
#transport#-1}{
5ttLpMhkRjKLkvoY7ltUWg} {
192.168.211.132}{
192.168.211.132:9300}]
我们需要修改es配置开启远程连接,代码如下:
登录容器
docker exec -it es /bin/bash
进入config目录
cd config
调用ls命令可以看到如下文件
elasticsearch.yml log4j2.properties scripts
修改elasticsearch.yml文件
vi elasticsearch.yml
修改如下图:
同时添加下面一行代码:
cluster.name: my-elasticsearch
重启docker
docker restart es
三、项目整合ElasticSearch
pom.xml文件中添加ElasticSearch的依赖
<!--elasticsearch-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置文件 search-service.yml 中ElasticSearch的相关配置:
server:
port: 9006
其他配置...
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 192.168.220.110:9300
elasticsearch:
rest:
uris: 192.168.220.110:9200
编写启动类 SearchApplication.java
package com.gyh.legou.search;
@SpringBootApplication //spring boot
@EnableDiscoveryClient //将微服务注册到注册中心
@EnableFeignClients //通过feign调用其他微服务
@EnableCircuitBreaker //开启熔断,微服务容错保护
public class SearchApplication {
public static void main(String[] args) {
SpringApplication.run(SearchApplication.class, args);
}
}
我们创建一个类,封装要保存到索引库的数据,并设置映射属性:
package com.gyh.legou.search.po;
@Data
@Document(indexName = "goods_legou", type = "docs_legou"