ElasticSearch/Kibana/Logstash+SpringBoot的部署与使用

文章目录

  • ElasticSearch/Kibana/Logstash
    • 一、环境部署
      • Docker
        • 1 ElasticSearch/Kibana
        • 2 elasticsearch-analysis-ik
        • 3 Logstash(回头补充)
        • 4 cerebro
        • 5 更为简单的安装方法
      • Linux
      • Windows
        • 1 服务端安装
        • 2 中文分词器ik安装
        • 3 监控端kibana安装
    • 二、基本使用
      • 2.1 相关名词
        • 属性概念
        • HTTP方法
        • 自动映射规则
        • 倒排索引
      • 2.2 Kibana操作使用
        • 操作映射
        • 操作文档
        • 普通查询
        • DSL查询
        • 其他查询方法
        • 分词器的使用
      • 2.3 SpringBoot项目集成
      • 2.4 RestHighLevelClient
        • 创建索引
        • 还有非常多的Api操作
      • 2.5 ElasticsearchRepository
        • 示例代码
          • 1 实体类
          • 2 继承类接口
          • 3 使用
    • 没时间写,未完待续.....
  • over

ElasticSearch/Kibana/Logstash

文章
Elasticsearch:官方分布式搜索和分析引擎 | Elastic
ElasticSearch常用命令 - 简书 (jianshu.com)
更简单的docker搭建elk+cerebro环境 - 小跑跑泡 - 博客园 (cnblogs.com)

一、环境部署

建议使用docker,其他部署的方式屁事太多了,bug调的心情都不好了

Docker

先把国内源换上,然后

1 ElasticSearch/Kibana

## 拉镜像
docker pull elasticsearch:7.8.0
docker pull kibana:7.8.0
docker pull logstash:7.8.0
## 启动
docker run -d --name elasticsearch780 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0
docker run -d --name kibana780 --link elasticsearch780:elasticsearch -p  5601:5601 kibana:7.8.0

这个链接可能还不够,我们进去kibana里面的config改一下IP指向(宿主机IP:Port),然后重启容器

访问http://192.168.247.177:5601/,开启你的春天

2 elasticsearch-analysis-ik

在线安装

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip

3 Logstash(回头补充)

docker run -d --name=logstash780 -p 5044:5044 logstash:7.8.0

修改config文件

先不研究了,暂时没精力

4 cerebro

docker pull yannart/cerebro
docker run -d --name cerebro -p 9000:9000 yannart/cerebro

然后访问

http://192.168.247.177:9000/

简直酷的不行

5 更为简单的安装方法

docker pull sebp/elk 
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m  -e ES_MAX_MEM=1024m -it --name elk sebp/elk

Linux

# 官网下载包,解压
wget -i -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
# 创建es用户,软件禁止使用Root用户启动
groupadd es
useradd es -g es
passwd es# 目录赋权
chown -R es:es elasticsearch-7.4.0# 进入config目录修改yml文件,追加如下配置
network.host: 0.0.0.0
http.port: 9200
equire explicit names when deleting indices:
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.ml.enabled: false
cluster.initial_master_nodes: ["node-1"] #这里的node-1为node-name配置的值# 追加修改limits文件,不然启动时会出现error提示内存不足
# max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vim  /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 5000
* hard nproc 5000
root soft nproc 5000
root hard nproc 5000vim /etc/sysctl.conf
vm.max_map_count=262144# 最后,进入bin目录,启动程序
./bin/elasticsearch

Windows

装这些东西挺烦的

第三个是可视化界面,可以不装

1 服务端安装

首先安装第一个

修改elasticsearch.yml文件

2 中文分词器ik安装

3 监控端kibana安装

这个比较无脑,改一个config文件的指向地址就行了,这里就不细说了

二、基本使用

目前SpringBootDataES那个模板已经预备弃用了,所以不要用那个了

2.1 相关名词

属性概念

关键字名称名词解释对应SQL
索引 index在我们建立索引之后,可以直接往索引中写入文档
类型 type字段的类型,例如是short类型还是integer类型类型
字段 Field相当于是数据表的字段,字段在ES中可以理解为JSON数据的键字段
映射mapping映射是对文档中每个字段的类型进行定义,类似说是short类型还是integer类型;;但是在es已经实现了动态映射,我们并不需要特意去创建映射,它也有相应的规则来应对映射,看下面的图片
文档(_doc) document在ES中相当于传统数据库中的的概念,ES中的数据都以JSON的形式来表示,在MySQL中插入一行数据和ES中插入一个JSON文档是一个意思实际数据
元数据 metadata一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:index(文档存储位置)、type(类型)、id(文档的唯一标识)描述

HTTP方法

HTTP方法说明
GET获取请求对象的当前状态
POST改变对象的当前状态
PUT创建一个对象
DELETE销毁对象
HEAD请求获取对象的基础信息

自动映射规则

自动判断的规则如下

支持的类型如下

你学废了吗

倒排索引

2.2 Kibana操作使用

操作映射

# 创建索引
PUT person
# 查询索引
GET person
# 删除索引
DELETE person
# 查询映射
GET person/_mapping
# 索引库中添加字段
PUT person/_mapping
{"properties":{"address":{"type":"text"},"name":{"type":"keyword"},"age":{"type":"integer"}}
}

操作文档

# 添加文档,指定id
PUT person/_doc/1
{"name":"张三","age":20,"address":"深圳宝安区"
}# 查询文档
GET person/_doc/1# -----# 添加文档,不指定id
POST person/_doc/
{"name":"李四","age":20,"address":"深圳南山区"
}# 查询文档
GET person/_doc/c5-l8HwBuywWr9m6rrmr# -----# 查询所有文档
GET person/_search# 删除文档
DELETE person/_doc/1# 修改文档 根据id,id存在就是修改,id不存在就是添加
PUT person/_doc/2
{"name":"硅谷","age":20,"address":"深圳福田保税区"
}

普通查询

# 全文查询-match查询
# match 先会对查询的字符串进行分词,在查询,求交集
# 很像模糊匹配查询
GET person/_search
{"query": {"match": {"address": "南山"}}
}# ---# 查询所有数据
GET person/_search# 查询 深开头的数据
GET person/_search
{"query": {"term": {"address": {"value": "深"}}}
}# ---# 查询名字等于张三的用户
GET  person/_search?q=name:张三

DSL查询

做一些数据出来

get person/_searchput person/_doc/101
{"name":"t1","age":21,"address":"釜山市晋城县"
}put person/_doc/102
{"name":"t2","age":23,"address":"北京市三里屯"
}put person/_doc/103
{"name":"t3","age":25,"address":"广州市天河区"
}put person/_doc/104
{"name":"t4","age":51,"address":"广州市白云区"
}

玩起来

get person/_search# 根据年龄查询
POST  person/_doc/_search
{"query":{"match":{"age":20}}
}# 查询年龄大于20岁 在深圳的 并且高亮显示
GET  person/_doc/_search
{"query":{"bool":{"filter":{"range":{"age":{"gt":19}}},"must":{"match":{"address":"深圳"}}}},"highlight": {"fields": {"address": {}}}
}

其他查询方法

get person/_search# group by
# 这里的terms可以指定多个匹配条件
GET  person/_search
{"aggs": {"all_interests": {"terms": {"field": "age"}}}
}# 指定返回数据的响应字段
GET person/_doc/101?_source=id,name,address# 判断文档是否存在 存在返回200 - OK
HEAD  person/_doc/101

分词器的使用

刚开始我们装了分词器,现在解释一下ik里面的两个分词算法

  • ik_smart 最少切分
  • ik_max_word 最细粒度划分

可以用作映射里的type类型

2.3 SpringBoot项目集成

上面说了这么多,但是我们是Java开发,还得从SpringBoot入手

导入依赖,这里的依赖版本对应你的es版本

    <dependencies><dependency><groupId>junitgroupId><artifactId>junitartifactId><scope>testscope>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId>dependency><dependency><groupId>org.projectlombokgroupId><artifactId>lombokartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-devtoolsartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starterartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-elasticsearchartifactId>dependency><dependency><groupId>com.alibabagroupId><artifactId>fastjsonartifactId>dependency>dependencies>

配置yaml文件

server:port: 19200spring:elasticsearch:rest:uris: 192.168.247.177:9200

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestEs {@Autowiredprivate RestHighLevelClient restHighLevelClient;@Testpublic void contextLoads() throws IOException {CreateIndexRequest request = new CreateIndexRequest("user");CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);boolean acknowledged = response.isAcknowledged();System.out.println(acknowledged);}
}

2.4 RestHighLevelClient

创建索引

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestEs {@Autowiredprivate RestHighLevelClient restHighLevelClient;@Testpublic void contextLoads() throws IOException {// 1.使用client获取操作索引的对象IndicesClient indicesClient = restHighLevelClient.indices();// 2.具体操作,获取返回值CreateIndexRequest createRequest = new CreateIndexRequest("indexName");CreateIndexResponse response = indicesClient.create(createRequest, RequestOptions.DEFAULT);// 3.根据返回值判断结果System.out.println(response.isAcknowledged());}
}

还有非常多的Api操作

我就不一一写了

api文档
Document APIs | Java REST Client Elastic
Java High Level REST Client 中文API(仅供参考)_含江君-CSDN博客
https://gitee.com/li-xiaoming411/drawing-bed/raw/master/RestHighLevelClient-Run.rar

2.5 ElasticsearchRepository

示例代码

1 实体类

封装好的实体类对象,用于与es交互

@Data
@Document(indexName = "goods", type = "info", shards = 3, replicas = 1)
public class Goods {/*** 商品Id*/@Idprivate Long id;/*** 默认图片*/@Field(type = FieldType.Keyword, index = false)private String defaultImg;/*** title = skuName*/@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;/*** 商品价格*/@Field(type = FieldType.Double)private Double price;/*** 创建时间*/@Field(type = FieldType.Date)private Date createTime;/*** 品牌Id*/@Field(type = FieldType.Long)private Long tmId;/*** 品牌名称*/@Field(type = FieldType.Keyword)private String tmName;/*** 品牌的logo*/@Field(type = FieldType.Keyword)private String tmLogoUrl;/*** 一级分类Id*/@Field(type = FieldType.Long)private Long category1Id;@Field(type = FieldType.Keyword)private String category1Name;@Field(type = FieldType.Long)private Long category2Id;@Field(type = FieldType.Keyword)private String category2Name;@Field(type = FieldType.Long)private Long category3Id;@Field(type = FieldType.Keyword)private String category3Name;/*** 热度排名*/@Field(type = FieldType.Long)private Long hotScore = 0L;/*** 平台属性集合对象* Nested 支持嵌套查询*/@Field(type = FieldType.Nested)private List<SearchAttr> attrs;
}
2 继承类接口
@Component
public interface GoodsElasticsearchRepository extends ElasticsearchRepository<Goods, Long> {
}
3 使用

直接看代码吧,你看得懂的

    @Overridepublic void cancelSale(Long skuId) {goodsElasticsearchRepository.deleteById(skuId);}@Overridepublic void onSale(Long skuId) {// 数据映射Goods goods = new Goods();goods.setId(skuId);goods.setHotScore(0L);// 各种set方法.....省略// 插入数据goodsElasticsearchRepository.save(goods);}@Overridepublic void createGoods() {// 创建索引,插入映射elasticsearchRestTemplate.createIndex(Goods.class);elasticsearchRestTemplate.putMapping(Goods.class);}
}

1

没时间写,未完待续…

over


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部