文章目录

  • 官网
  • demo
  • 单机
    • 安装JDK
    • 安装Docker
      • docker安装elasticsearch
        • 下载elasticsearch
        • 安装
        • 进入镜像
        • 记得关闭防火墙
        • 如果还不能打开,进入配置文件(能打开跳过)
      • docker 安装kibana
        • 拉取镜像
        • 创建临时目录
        • 编辑文件
        • 增加配置文件(用自己的ES链接)
        • 启动
  • 集群
    • 集群安装
      • 调高JVM线程数限制数量
      • 下载elasticsearch
      • 创建目录
      • vi 进入 yml
      • 启动es
      • 访问
  • ik分词器
    • 解压上次到/data/es/ik目录下
    • 目录赋权
    • 复制到镜像目录下
  • docker 安装elasticsearch-head
    • 需要安装部署
      • Elasticsearch
      • Logstash
      • Kibana
        • 增删改查
      • Beats
      • 安装目录
  • 索引
    • 什么是搜索引擎?
  • 分片
  • 倒排索引
  • Mapping
    • 1 概念:
    • 2 查看mapping
    • 3 ES数据类型
    • 4 两种映射类型
      • Dynamic field mapping:
      • 整数 => long
      • 浮点数 => float
      • true || false => boolean
      • 日期 => date
      • 数组 => 取决于数组中的第一个有效值
      • 对象 => object
      • 字符串 => 如果不是数字和日期类型,那会被映射为text和keyword两个类型
      • Expllcit field mapping:手动映射
    • 5 映射参数

官网

官网: https://www.elastic.co/cn/
中文网站: https://elasticsearch.cn/
学习网站:http://www.elastic.show/

demo

https://gitee.com/valuenull/demo/tree/origin/es_demo

单机

安装JDK

https://blog.csdn.net/yuell102/article/details/119305484?spm=1001.2014.3001.5501

安装Docker

https://blog.csdn.net/yuell102/article/details/116572748

docker安装elasticsearch

下载elasticsearch

docker pull elasticsearch:7.12.1

安装

docker run -d --name elasticsearch --restart=always --net host -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.12.1

进入镜像

docker exec -ti [docker镜像名称] /bin/bash

docker exec -ti elasticsearch  /bin/bash

记得关闭防火墙

//暂时关闭防火墙
systemctl stop firewalld
service  iptables stop

如果还不能打开,进入配置文件(能打开跳过)

vi config/elasticsearch.yml

添加

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.type: single-node
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

//访问 ip:9200

docker 安装kibana

拉取镜像

docker pull kibana:7.5.1

创建临时目录

sudo mkdir -p /data/kibana/config

编辑文件

vi /data/kibana/config/kibana.yml

增加配置文件(用自己的ES链接)

server.name: kibana
server.host: "0.0.0.0"
server.port: 5602
elasticsearch.hosts: [ "http://192.168.31.190:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true

启动

docker run -d   --name=kibana   --restart=always  -p 5602:5602 -v /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml   kibana:7.5.1

集群

集群安装

调高JVM线程数限制数量

vim /etc/sysctl.conf

加入

vm.max_map_count=262144

退出后 启动配置

sysctl -p

下载elasticsearch

docker pull elasticsearch:7.12.1

创建目录

sudo mkdir -p /data/es

vi 进入 yml

es1.yml 写入

sudo vi /data/es/es1.yml
###开启跨域,为了让es-head可以访问
http.cors.enabled: true
http.cors.allow-origin: "*"###集群的名称
cluster.name: es
### 节点的名称
node.name: es1
### 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
### 允许该节点存储数据(默认开启)
node.data: true
### 允许任何ip访问
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
### 通过这个ip列表进行节点发现,我这里配置的是各个容器的ip
discovery.zen.ping.unicast.hosts: ["8.130.167.42:9300","8.130.167.42:9301","8.130.167.42:9302"]
###端口
http.port: 9200
transport.tcp.port: 9300
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: es1
## network.publish_host: 192.168.9.219

es2.yml 写入

sudo vi /data/es/es2.yml
### 开启跨域,为了让es-head可以访问
http.cors.enabled: true
http.cors.allow-origin: "*"# 集群的名称
cluster.name: es
node.name: es2network.bind_host: 0.0.0.0
network.host: 0.0.0.0
node.master: true
node.data: truediscovery.zen.ping.unicast.hosts: ["8.130.167.42:9300","8.130.167.42:9301","8.130.167.42:9302"]
discovery.zen.minimum_master_nodes: 2http.port: 9201
transport.tcp.port: 9301
cluster.initial_master_nodes: es1###network.publish_host: 192.168.9.219

es3.yml 写入

sudo vi /data/es/es3.yml
# 开启跨域,为了让es-head可以访问
http.cors.enabled: true
http.cors.allow-origin: "*"# 集群的名称
cluster.name: es
node.name: es3network.bind_host: 0.0.0.0
network.host: 0.0.0.0
node.master: true
node.data: true
http.port: 9202
transport.tcp.port: 9302
discovery.zen.ping.unicast.hosts: ["8.130.167.42:9300","8.130.167.42:9301","8.130.167.42:9302"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: es1###network.publish_host: 192.168.9.219

启动es

docker run -d --name es1 --restart=always --net host -p 9200:9200 -p 9300:9300 -v /data/es/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml  elasticsearch:7.12.1
docker run -d --name es2 --restart=always --net host -p 9201:9201 -p 9301:9301 -v /data/es/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.12.1
docker run -d --name es3 --restart=always --net host -p 9202:9202 -p 9302:9302 -v /data/es/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml  elasticsearch:7.12.1

访问

//http://8.130.167.42:9200/
//http://8.130.167.42:9200/_cat/nodes?pretty
//http://8.130.167.42:9200/_cluster/health

ik分词器

下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

解压上次到/data/es/ik目录下

目录赋权

sudo chmod -R 777 /data/es/ik

复制到镜像目录下

es2是镜像名

sudo docker cp /data/es/ik es2:/usr/share/elasticsearch/plugins/

docker 安装elasticsearch-head

拉取镜像

docker pull mobz/elasticsearch-head:5

启动

docker run -d -p 9100:9100 --restart=always --name es_h docker.io/mobz/elasticsearch-head:5

在浏览器中打开elasticsearch-head页面,填入ElasticSearch地址 访问 ip:9100
如果出现拒绝访问

获取docke 镜像列表

docker ps -a   #拿到运行容器elasticsearch-head 的 id

进入exec es_h是容器id

docker exec -it es_h /bin/bash

下载

apt-get update
apt-get install vim

进入

vim _site/vendor.js

搜索 一共要改两个地方的x-www-form-urlencoded

/application/x-www-form-urlencoded

application/x-www-form-urlencoded替换成application/json;charset=UTF-8

application/json;charset=UTF-8

退出exec环境

exit

重启

docker restart es_h

需要安装部署

服务 用途
Elasticsearch 基于Json的分布式搜索和分析引擎
Logstash 动态数据手机管理,生态丰富
Kibana 提供数据的可视化界面
Beats 清亮级的数据采集器

Elasticsearch

//Elastic Stack 的核心//搜索 聚合分析 大数据存储//分布式 高性能 高可用 可伸缩 易维护//支持文本搜索 结构化数据 非结构化数据 地理位置搜索等

Logstash

//Logstash 主要用于采集 过滤 输出//采集: 支持多种输入选择 可以同时捕捉众多来源的事件//过滤: 能够动态的转换与解析数据。不受格式与复杂度的影响
//      利用Grok从非结构化数据中派生出结构
//      从IP地址破译出地理坐标
//      从PII数据匿名化 完全排除敏感字段
//      简化整体处理 不受数据源 格式或架构的影响//输出: 是官方首选的输出方式,但并非唯一选择,目前支持200多个插件

Kibana

//Kibana 可视化 管理和监控//可视化
//图标: 柱状图 线状态 饼图 旭日图等
//位置分析: 位置搜索 形状搜索 地图搜索
//时序分析: 可以方便的从各种不同时间维度查看//管理和监控
//机器学习: 非监督型异常和隐患检测
//安全监控: 堆栈检测 异常报警 策略可配置
//柱状图 线状图 饼图 旭日图等

增删改查

查看所有节点

GET _cat/nodes

查询book 索引

GET book/_search
{}

查询book索引下的指定参数

GET book/_search
{"query": {"match": {"content": "chenqionghe"}}
}

增加一条数据

POST book/_doc
{"page":8,"content": "chenqionghe喜欢运动,绳命是如此的精彩,绳命是多么的辉煌"
}

更新数据

PUT book/_doc/iSAz4XABrERdg9Ao0QZI
{"page":8,"content":"chenqionghe喜欢运动,绳命是剁么的回晃;绳命是入刺的井猜"
}

删除数据

POST book/_delete_by_query
{"query": {"match": {"page": 8}}
}

批量插入数据

POST book/_bulk
{ "index":{} }
{ "page":22 , "content": "Adversity, steeling will strengthen body.逆境磨练意志,锻炼增强体魄。"}
{ "index":{} }
{ "page":23 , "content": "Reading is to the mind, such as exercise is to the body.读书之于头脑,好比运动之于身体。"}
{ "index":{} }
{ "page":24 , "content": "Years make you old, anti-aging.岁月催人老,运动抗衰老。"}
{ "index":{} }

查看索引字段映射

GET /book/_mappings

Beats

//Beats 轻量级数据采集器 开源 轻量级 即插即用 可扩展//开源:集合多种单一用途的数据采集器 从成百上千或千上万台机器和系统向Logstash或Elasticsearch发送数据//轻量级:使用go语言开发,对服务器资源占用极低,采用符合Elastic Common Schema要求的数据,可以将数据直接转发Logstash进行转换与解析。//即插即用:Filebeat和Metricbeat中包含的一些模块能从关键数据源采集 解析和可视化信息的过程。只需运行一行命令。即可开始搜索//可扩展: 由于Beats开源,不能满足开发需要,可以自行构建

安装目录

目录名称 描述
bin 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等
config 配置文件目录,如elasticsearch配置、角色配置、jvm配置等
lib elasticsearch所以来的Java库
data 默认的数据库存放目录,包含节点、分片、索引、文档的所有数据、生产环境要求必须修改
logs 默认的日志文件存储路径、生产环境务必修改
modules 包含所有的Elasticsearch模块、如Cluster、Discovery、Indices等
plugins 已经安装的插件目录
jdk/jdk.app 7.0以后才有,自带的Java环境

索引

什么是搜索引擎?

全文搜索引擎自然语言处理(NLP)、爬虫、网页处理、大数据处理、如谷歌、百度、搜狗、必应等等
垂直搜索引擎有明确搜索目的的搜索行为各大电商网站、OA、站内搜索、视频网站等

分片

倒排索引

Mapping

1 概念:

​ ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。分词器、评分等概念在后面的课程讲解。

2 查看mapping

​ GET /index/_mappings

3 ES数据类型

常见类型

1) 数字类型

​ long integer short byte double float half_float scaled_float unsigned_long

2) Keywords

keyword:适用于索引结构化的字段,可以用于过滤、排序、聚合。keyword类型的字段只能通过精确值(exact value)搜索到。Id应该用keyword

​ constant_keyword:始终包含相同值的关键字字段

​ wildcard:可针对类似grep的通配符查询优化日志行和类似的关键字值

​ 关键字字段通常用于排序, 汇总和Term查询,例如term

3) Dates(时间类型):包括datedate_nanos

​ 4) alias:为现有字段定义别名。

​ 5) binary(二进制):binary

​ 6) range(区间类型):integer_range、float_range、long_range、double_range、date_range

​ 7) text:当一个字段是要被全文搜索的,比如Email内容、产品描述,这些字段应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索 引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。(解释一下为啥不会为text创建正排索引:大量堆空间,尤其是 在加载高基数text字段时。字段数据一旦加载到堆中,就在该段的生命周期内保持在那里。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟问 题。这就是默认情况下禁用字段数据的原因)

② 对象关系类型:

1) object:用于单个JSON对象

2) nested:用于JSON对象数组

​ 3) flattened:允许将整个JSON对象索引为单个字段。

③ 结构化类型:

1) geo-point:纬度/经度积分

2) geo-shape:用于多边形等复杂形状

3) point:笛卡尔坐标点

2) shape:笛卡尔任意几何图形

​ ④ 特殊类型:

1) IP地址:ip 用于IPv4和IPv6地址

2) completion:提供自动完成建议

​ 3) tocken_count:计算字符串中令牌的数量

​ 4) murmur3:在索引时计算值的哈希并将其存储在索引中

​ 5) annotated-text:索引包含特殊标记的文本(通常用于标识命名实体)

​ 6) percolator:接受来自query-dsl的查询

​ 7) join:为同一索引内的文档定义父/子关系

​ 8) rank features:记录数字功能以提高查询时的点击率。

​ 9) dense vector:记录浮点值的密集向量。

​ 10) sparse vector:记录浮点值的稀疏向量。

​ 11) search-as-you-type:针对查询优化的文本字段,以实现按需输入的完成

​ 12) histogram:histogram 用于百分位数聚合的预聚合数值。

​ 13) constant keyword:keyword当所有文档都具有相同值时的情况的 专业化。

​ ⑤ array(数组):在Elasticsearch中,数组不需要专用的字段数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值都必须具有 相同的数据类型。

​ ⑥新增:

​ 1) date_nanos:date plus 纳秒

​ 2) features:

4 两种映射类型

5 映射参数

index:是否对创建对当前字段创建倒排索引,默认true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在source元数据中展示

​ ② analyzer:指定分析器(character filter、tokenizer、Token filters)。

​ ③ boost:对当前字段相关度的评分权重,默认1

​ ④ coerce:是否允许强制类型转换 true “1”=> 1 false “1”=< 1

​ ⑤ copy_to:该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询

doc_values:为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值以节省磁盘 空间(不支持text和annotated_text)

​ ⑦ dynamic:控制是否可以动态添加新字段

​ 1) true 新检测到的字段将添加到映射中。(默认)

​ 2) false 新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍会出现在_source返回的匹配项中。这些字段不会添加到映射中,必须显式 添加新字段。

​ 3) strict 如果检测到新字段,则会引发异常并拒绝文档。必须将新字段显式添加到映射中

eager_global_ordinals:用于聚合的字段上,优化聚合性能。

​ 1) Frozen indices(冻结索引):有些索引使用率很高,会被保存在内存中,有些使用率特别低,宁愿在使用的时候重新创建,在使用完毕后丢弃数据, Frozen indices的数据命中频率小,不适用于高搜索负载,数据不会被保存在内存中,堆空间占用比普通索引少得多,Frozen indices是只读的,请求可能 是秒级或者分钟级。*eager_global_ordinals不适用于Frozen indices*

​ ⑨ enable:是否创建倒排索引,可以对字段操作,也可以对索引操作,如果不创建索引,让然可以检索并在_source元数据中展示,谨慎使用,该状态无法 修改。

    PUT my_index{"mappings": {"enabled": false}}

fielddata:查询时内存数据结构,在首次用当前字段聚合、排序或者在脚本中使用时,需要字段为fielddata数据结构,并且创建倒排索引保存到堆中

fields:给field创建多字段,用于不同目的(全文检索或者聚合分析排序)

​ ⑫ format:格式化

  "date": {"type":  "date","format": "yyyy-MM-dd"}

​ ⑬ ignore_above:超过长度将被忽略

​ ⑭ ignore_malformed:忽略类型错误

​ ⑮ index_options:控制将哪些信息添加到反向索引中以进行搜索和突出显示。仅用于text字段

​ ⑯ Index_phrases:提升exact_value查询速度,但是要消耗更多磁盘空间

​ ⑰ Index_prefixes:前缀搜索

​ 1) min_chars:前缀最小长度,>0,默认2(包含)

​ 2) max_chars:前缀最大长度,<20,默认5(包含)

​ ⑱ meta:附加元数据

​ ⑲ normalizer:

⑳ norms:是否禁用评分(在filter和聚合字段上应该禁用)。

21 null_value:为null值设置默认值

​ 22 position_increment_gap:

​ 23 proterties:除了mapping还可用于object的属性设置

24 search_analyzer:设置单独的查询时分析器:

​ 25 similarity:为字段设置相关度算法,支持BM25、claassic(TF-IDF)、boolean

26 store:设置字段是否仅查询

​ **27 term_vector:**运维参数

Elastic Stack相关推荐

  1. 2021年大数据ELK(一):集中式日志协议栈Elastic Stack简介

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.简介 二.ELK 协议栈介绍及体系结构 三.集中式日志协议栈 ...

  2. 【Elastic Stack(一)】Elastic Stack简介

    如果你没有听说过Elastic Stack,那你一定听说过ELK.实际上ELK是三款软件的简称,分别是Elasticsearch.Logstash.Kibana组成,在发展的过程中,又有新成员Beat ...

  3. elastic stack中的Beats是什么?

    elastic stack中的Beats是什么? elastic stack栈涉及到以下⼏个组件 beats:⽤于轻量级⽇志采集,⽀持⽂件采集,系统数据采集,特定中间件数据采集等 logstash:⽤ ...

  4. 【Elastic Stack学习】ELK日志分析平台(一)ELK简介、ElasticSearch集群

    * ELK简介: ELK是Elasticsearch . Logstash.Kibana三个开源软件的缩写.ELK Stack 5.0版本之后新增Beats工具,因此,ELK Stack也改名为Ela ...

  5. Elastic Stack简介和Elasticsearch基本介绍

    1. Elastic Stack简介 1.1简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn.包含三大基础组件,分别是Elasticsearc ...

  6. 九、Docker快速搭建Elastic Stack(上篇)

    @Author : By Runsen @Date : 2020/6/19 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  7. 十、Docker快速搭建Elastic Stack(下篇)

    @Author : By Runsen @Date : 2020/6/19 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  8. 腾讯技术课|基于Elastic Stack 搭建日志分析平台

    为了让读者们可以更好的理解「如何基于Elastic Stack 搭建日志分析平台」,腾讯技术工程公众号特别邀请腾讯基础架构部的陈曦工程师通过语音录播分享的方式在「腾讯技术课」小程序里同步录制了语音+P ...

  9. Elastic Stack 安装

    Elastic Stack 是一套支持数据采集.存储.分析.并可视化全面的分析工具,简称 ELK(Elasticsearch,Logstash,Kibana)的缩写. 安装Elastic Stack ...

  10. ELK Stack 与 Elastic Stack 的异同点

    在很多场合,都可以看到 ELK Stack 或者是 Elastic Stack 的介绍,大多数人都会产生疑问,这两者到底有什么区别?本文将介绍 ELK Stack 与 Elastic Stack 的异 ...

最新文章

  1. jmeter 线程执行顺序_面试官让我说出8种线程顺序执行的方法!我懵了
  2. arm-linux内核编译过程小结
  3. golang中的http conn实现分析
  4. Linux查看swap使用情况小脚本
  5. 2021年中总结汇报PPT
  6. C++里数组名+1和数组名的地址+1的区别
  7. python编程基础知识点_12个关于Python编程基础知识的总结
  8. 【生活】我的2019年度总结
  9. FreeRTOS任务优先级说明
  10. 使用tomcat+eclipse搭建javaweb基础开发环境
  11. 关于SBUS信号在单片机中的一些个人理解
  12. 单点登录系统CAS入门
  13. 高性能核心板IDO-SOM3908-V1:接口丰富,性能更强,速度更快!
  14. 小米pro15拆机_小米笔记本Pro 15增强版值得买吗 小米笔记本Pro 15增强版拆解+评测...
  15. 我所理解的羽毛球运动(没有教练业余羽毛球如何让自己提高?)
  16. 如何让XP系统能够访问Https
  17. pr学习心得(入门篇)
  18. 7-1 哈夫曼编码(实验) 最全代码解析
  19. Python urllib.urlencode
  20. 【工具】goland pull代码 出现 you local changes would be overwritten by merge.Commit, stash or revert ......

热门文章

  1. 用前端框架开发一款APP要多少钱
  2. PHP下载文件的正确方式
  3. C# 调用outlook 收发邮件
  4. 设计模式-工厂模式(Factory)
  5. FPGA电源设计总结
  6. Unity3D中隐藏与显示物体的方法
  7. ubantu pyCharm python 安装
  8. APS自动排产 — 排产结果拉动物料需求计划
  9. Windows 缓冲区溢出与数据执行保护DEP
  10. Python肺CT图像窗位窗宽调整