网站建设视觉设计,网站建设与网页设计课,网站无内容 备案,保定哪家公司做网站ElasticSearch 7ELK 程序安装Docker安装下载ES镜像提前创建挂载文件夹添加配置文件创建并启动容器可能出现的异常安装IK分词使用ElasticHD客户端工具(目前使用发现无法做增删改)安装Kibana 软件包安装安装ElasticSearch#xff08;需要JDK1.8#xff09;安装IK#xff08;下… ElasticSearch 7ELK 程序安装Docker安装下载ES镜像提前创建挂载文件夹添加配置文件创建并启动容器可能出现的异常安装IK分词使用ElasticHD客户端工具(目前使用发现无法做增删改)安装Kibana 软件包安装安装ElasticSearch需要JDK1.8安装IK下载和elasticsearch相同版本的IK安装Kibana下载和elasticsearch相同版本安装Filebeat可以理解为简化版的logstash 实操ElasticSearch基础操作命令1. 查看节点状态2、查看索引3、查看节点列表 操作分词器命令1、ES默认分词器2、IK最小切分3、IK最细粒度切分 全部词库的可能4、创建索引时设置默认分词器如果不设置默认就是standard分词器 操作索引命令1、增加索引2、创建带字段规则的索引 类似表字段类型3、创建带字段规则默认分词器的索引4、删除索引 POST和PUT的区别操作document命令1、新增document2、搜索 type 全部数据3、查找指定 id 的 document 数据4、修改 document5、删除一个 document6、按条件查询(全部)7、按照字段的分词查询8、按照分词子属性查询9、按照短语查询10、模糊查询如果分词器中没有对应分词可以使用11、查询后过滤12、查询前过滤(推荐使用)13、按范围过滤14、排序15、分页查询16、指定查询的字段17、聚合18、高亮 关于Mapping1、查看mapping2、手动指定Mapping IKIK分词器细粒度的拆分自定义ik词汇 程序安装
Docker安装
下载ES镜像
docker pull elasticsearch:7.6.1提前创建挂载文件夹
mkdir -p /home/docker/elasticsearch/config
mkdir -p /home/docker/elasticsearch/data
mkdir -p /home/docker/elasticsearch/plugins# 创建好之后需要给/home/docker/elasticsearch目录赋予777权限 不然启动会失败
sudo chmod -R 777 /home/docker/elasticsearch/添加配置文件
vi /home/docker/elasticsearch/config/elasticsearch.yml# 添加以下配置
# 集群名称
cluster.name: docker-cluster
# 节点名称
node.name: node1
# http端口
http.port: 9200
# 访问权限
network.host: 0.0.0.0
http.host: 0.0.0.0创建并启动容器
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \-e discovery.typesingle-node \-e ES_JAVA_OPTS-Xms512m -Xmx512m \-v /home/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \--restart always-d elasticsearch:7.6.1说明
-p 端口映射-e discovery.typesingle-node 单点模式启动-e ES_JAVA_OPTS“-Xms512m -Xmx512m”设置启动占用的内存范围-v 目录挂载–restart always docker容器启动时自动启动-d 后台运行
可能出现的异常
1、 因虚拟内存太少导致 处理sudo sysctl -w vm.max_map_count655360
安装IK分词
下载地址https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.1
# 创建目标文件夹ES会自动读取plugins这个目录下的插件
mkdir -p /home/docker/elasticsearch/plugins/ik
# 将下载好的ik分词器放入/home/docker/elasticsearch/plugins/ik下
# 解压
unaip elasticsearch-analysis-ik-7.6.1.zip使用ElasticHD客户端工具(目前使用发现无法做增删改)
ElasticHD轻量使用方便在window环境下提供了一个exe程序 下载地址https://github.com/qax-os/ElasticHD/tags
安装Kibana
1、下载镜像
docker pull kibana:7.6.12、创建挂载文件和目录
mkdir -p /home/docker/elasticsearch/kibana/config/
vi /home/docker/elasticsearch/kibana/config/kibana.yml
# 添加以下配置# Default Kibana configuration for docker target
server.name: kibana
server.host: 0
elasticsearch.hosts: [ http://172.16.2.109:9200 ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN #汉化3、启动
docker run -d \--namekibana \--restartalways \-p 5601:5601 \-v /home/docker/elasticsearch/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \kibana:7.6.1软件包安装
百度网盘图灵资料中有
安装ElasticSearch需要JDK1.8
1、Elasticsearch下载地址 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
2、解压elasticsearch-7.6.1-linux-x86_64.tar.gz到/usr/local/目录 tar -avxf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /usr/local/
3、进入解压后的elasticsearch目录 1新建data目录mkdir data 2修改config/elasticsearch.ymlvim config/elasticsearch.yml 取消下列项注释并修改
cluster.name: my-application #集群名称
node.name: node-1 #节点名称
#数据和日志的存储目录
path.data: /usr/local/elasticsearch-7.6.1/data
path.logs: /usr/local/elasticsearch-7.6.1/logs
#设置绑定的ip设置为0.0.0.0以后就可以让任何计算机节点访问到了
network.host: 0.0.0.0
http.port: 9200 #数据交互端口
#设置在集群中的所有节点名称这个节点名称就是之前所修改的当然你也可以采用默认的也行目前是单机放入一个节点即可
cluster.initial_master_nodes: [node-1]#开启跨域访问支持默认为false
http.cors.enabled: true
#跨域访问允许的域名地址(允许所有域名)以上使用正则
http.cors.allow-origin: /.*/ 3修改 ./config/jvm.options vim config/jvm.options
-Xms200m
-Xmx200m4、启动ESES不能使用root用户启动需要创建新用户 1创建用户 adduser es passwd es 2改一下es目录所属用户 chown es /usr/local/elasticsearch-7.6.1/ -R 3vim 编辑 vim /etc/security/limits.conf在末尾加上
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 40964vim 编辑 vim /etc/security/limits.d/20-nproc.conf将* 改为用户名es
es soft nproc 4096
root soft nproc unlimited5vim 编辑 vim /etc/sysctl.conf在末尾加上
vm.max_map_count 6553606执行 sysctl -p
7登录刚才新建的es用户并启动elasticsearch su es ./bin/elasticsearch 前台启动 ./bin/elasticsearch -d后台启动
8关闭elasticsearch kill -9 pid 直接杀掉进程 //搜索es进程pid ps aux | grep elasticsearch
安装IK下载和elasticsearch相同版本的IK
1、切换目录 cd /usr/local/elasticsearch-7.6.1/plugins/ 2、创建ik文件夹 mkdir ik 3、切换到ik文件夹下进行文件上传 cd ik 4、没有unzip命令的同学输入如下命令安装unzip命令 yum install -y unzip 5、对zip进行解压 unzip elasticsearch-analysis-ik-7.6.1.zip
安装Kibana下载和elasticsearch相同版本
1、下载kibana wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz
2、解压 tar -zxvf kibana-7.6.1-linux-x86_64.tar.gz kibana-7.6.1
3、修改kibana配置文件kibana.yml
vim config/kibana.yml# 放开注释,将默认配置改成如下server.port: 5601
server.host: 0.0.0.0
elasticsearch.hosts: [http://127.0.0.1:9200]
server.name: one-server #随意
i18n.locale: zh-CN #汉化4、启动kibana ./kibana --allow-root nohup ./kibana --allow-root (后台启动) 5、关闭kibana kill -9 pid 直接杀掉进程 //搜索es进程pid netstat -tunlp|grep 5601
安装Filebeat可以理解为简化版的logstash
1、参考资料 https://www.cnblogs.com/zsql/p/13137833.html#_label2_0
2、filebeat和logstash的关系 因为logstash是jvm跑的资源消耗比较大所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人加入http://elastic.co公司以后因为es公司本身还收购了另一个开源项目packetbeat而这个项目专门就是用golang的有整个团队所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞于是新的项目就叫filebeat了。
3、官网下载,选择和ES相同的二进制版本 https://www.elastic.co/cn/downloads/past-releases#filebeat
4、将下载好的压缩包放入需要收集日志的服务器中并且解压
tar -xzvf filebeat-7.6.1-linux-x86_64.tar.gz5、编写配置
# 在filebeat-7.6.1-linux-x86_64目录内新建一个配置文件
touch filebeat_log.yml
# 编辑添加需要的配置文件夹信息
vi filebeat_log.yml
#添加以下信息
# filebeat.inputs.type :输入文件类型 log日志类型
# enabled是否开启
# paths日志文件目录 可以写多个
# output.elasticsearch.hostsES服务地址
filebeat.inputs:
- type: logenabled: truepaths:- /var/mq/log/server.log.*output.elasticsearch:hosts: [192.168.21.130:9200, 192.168.21.131:9200, 192.168.21.132:9200]6、Kibana中查看日志 1、先查看Filebeat创建索引的名称 Management-索引管理 2、配置查看这个日志 logs-设置
实操
1、http://note.youdao.com/noteshare?id83ea7925e0a1ae40e037f682b98d9874sub07E63083340A409683C3D8B26786C5492、https://note.youdao.com/ynoteshare/index.html?id7fffae927f3bc06aab2fdc663ec5cad3typenote_time1648026973975
ElasticSearch
text类型在存储数据的时候会默认进行分词并生成索引。而keyword存储数据的时候不会分词建立索引显然这样划分数据更加节省内存。 这样我们映射了某一个字段为keyword类型之后就不用设置任何有关分词器的事情了该类型就是默认不分词的文本数据类型。而对于text类型我们还可以设置它的分词类型。
基础操作命令 1. 查看节点状态
GET /_cat/health?v前两个是时间戳其余含义如下
1. cluster 集群名称
2. status 集群状态 green代表健康yellow代表分配了所有主分片但至少缺少一个副本此时集群数据仍旧完整red代表部分主分片不可用可能已经丢失数据。
3. node.total 代表在线的节点总数量
4. node.data 代表在线的数据节点的数量
5. shards active_shards 存活的分片数量
6. priactive_primary_shards 存活的主分片数量 正常情况下 shards的数量是pri的两倍。
7. relo relocating_shards 迁移中的分片数量正常情况为 0
8. init initializing_shards 初始化中的分片数量 正常情况为 0
9. unassign unassigned_shards 未分配的分片 正常情况为 0
10. pending_tasks 准备中的任务任务指迁移分片等 正常情况为 0
11. max_task_wait_time 任务最长等待时间
12. active_shards_percent 正常分片百分比 正常情况为 100%2、查看索引
GET /_cat/indices?v含义:
1. health 索引健康状态
2. status 索引的开启状态
3. index 索引名称
4. uuid 索引uuid
5. pri 索引主分片数
6. rep 索引副本分片数量
7. docs.count 索引中文档总数
8. docs.deleted 索引中删除状态的文档
9. store.size 主分片副本分分片的大小
10. pri.store.size 主分片的大小3、查看节点列表
GET /_cat/nodes?v操作分词器命令
1、ES默认分词器
POST _analyze{analyzer:standard,text:中国共产党}2、IK最小切分
GET _analyze
{analyzer: ik_smart,text: 中国共产党
}3、IK最细粒度切分 全部词库的可能
GET _analyze
{analyzer: ik_max_word,text: 中国共产党
}4、创建索引时设置默认分词器如果不设置默认就是standard分词器
# 设置分词器
PUT /myindex
{settings : {index : {analysis.analyzer.default.type: ik_max_word}}
}
# 查看分词器 如果自定义设置了分词器可以在索引信息中看到设置的分词器名称如果没有使用的就是系统默认分词器
GET myindex操作索引命令
1、增加索引
PUT /test012、创建带字段规则的索引 类似表字段类型
PUT /test02
{mappings: {properties: {name:{type: text},age:{type: long},birthday:{type: date},info:{type: text,fields : { # 添加一个类型 让info可以支持排序和聚合查询keyword : {type : keyword,ignore_above : 256}}}}}
}3、创建带字段规则默认分词器的索引
PUT /test03
{mappings: {properties: {name:{type: text},age:{type: long},birthday:{type: date}}},settings : {index : {analysis.analyzer.default.type: ik_max_word}}
}4、删除索引
DELETE /test01POST和PUT的区别
1、PUT、GET、DELETE是幂等的2、POST /uri 创建 PUT /uri/xxx 更新或创建3、POST不用加具体的id它是作用在一个集合资源之上的/uri而PUT操作是作用在一个具体资源之上的/uri/xxx。在ES中如果不确定document的IDdocuments具体含义见下那么直接POST对应uri “POST /website/blog” ES可以自己生成不会发生碰撞的UUID如果确定document的ID比如 “PUT /website/blog/123”那么执行创建或修改修改时_version版本号提高1
操作document命令
1、新增document
说明: 如果之前没建过 index 或者 typees 会自动创建。
PUT /movie_index/movie/1
{ id:1,name:operation red sea,doubanScore:8.5,actorList:[ {id:1,name:zhang yi},{id:2,name:hai qing},{id:3,name:zhang han yu}]
}
PUT /movie_index/movie/2
{id:2,name:operation meigong river,doubanScore:8.0,actorList:[ {id:3,name:zhang han yu}]
}PUT /movie_index/movie/3
{id:3,name:incident red sea,doubanScore:5.0,actorList:[ {id:4,name:zhang chen}]
}2、搜索 type 全部数据
GET /movie_index/movie/_search3、查找指定 id 的 document 数据
GET /movie_index/movie/14、修改 document
A. 整体替换 说明: 修改和新增没有区别,是做一个覆盖操作
PUT /movie_index/movie/3
{id:3,name:incident red sea,doubanScore:8.0,actorList:[ {id:1,name:zhang chen}]
}B. 只修改某个字段
POST /movie_index/movie/3/_update
{doc: {doubanScore:8.1}
}5、删除一个 document
DELETE /movie_index/movie/36、按条件查询(全部)
GET /movie_index/movie/_search
{query: {match_all: {}}
}7、按照字段的分词查询
GET /movie_index/movie/_search
{query: {match: {name: sea}}
}8、按照分词子属性查询
GET /movie_index/movie/_search
{query: {match: {actorList.name: zhang}}
}9、按照短语查询
说明: 按照短语查询是指匹配某个 field 的整个内容, 不再利用分词技术
GET /movie_index/movie/_search
{query: {match_phrase: {name: operation red}}
}10、模糊查询如果分词器中没有对应分词可以使用
说明: 校正匹配分词当一个单词都无法准确匹配es 通过一种算法对非常接近的单词也给与一定的评分能够查询出来但是消耗更多的性能。
GET /movie_index/movie/_search
{query: {fuzzy: {name: red}}
}11、查询后过滤
GET /movie_index/movie/_search
{query: {match: {name: red}},post_filter: {term: {actorList.id: 3}}
}12、查询前过滤(推荐使用)
GET movie_index/movie/_search
{query: {bool: {filter: [{term: {actorList.id: 3}},{term:{actorList.id: 1}}],must: {match: {name: red}}}}
}13、按范围过滤
GET movie_index/movie/_search
{query: {bool: {filter: {range: {doubanScore: {gt: 5,lt: 9}}}}}
}14、排序
GET movie_index/movie/_search
{query:{match: {name:red operation}}, sort: [{doubanScore: {order: desc}}]
}15、分页查询
# from 从第一条数据开始 size查询几条
GET movie_index/movie/_search
{query: { match_all: {} },from: 1,size: 1
}16、指定查询的字段
GET movie_index/movie/_search
{query: { match_all: {} },_source: [name, doubanScore]
}17、聚合
# 每个演员参演了多少部电影 (按名字进行计数)
GET movie_index/movie/_search
{aggs: {groupby_actor: {terms: {field: actorList.name.keyword}}}
}18、高亮
GET /movie_index/movie/_search
{query: {match: {name: sea}},highlight:{fields:{name:{}}}
}#自定义高亮标签
GET /movie_index/movie/_search
{query: {match: {name: sea}},highlight:{pre_tags: p stylecolor:red,post_tags: /p,fields:{name:{}}}
}关于Mapping
通过 Mapping 来设置和查看每个字段的数据类型.
1、查看mapping
GET movie_index/_mapping2、手动指定Mapping
A:搭建索引
# type:字段类型
# index是否建立倒排索引 默认值true建立
# store是否存储数据 默认值 true存储 如果不存储这个字段有索引能通过这个字段查询但是获取不到这个值的内容
PUT /movie_chn?include_type_nametrue
{mappings: {movie:{properties: {id:{type: long,index: false,store: true},name:{type: text, analyzer: ik_smart},doubanScore:{type: double},actorList:{properties: {id:{type:long},name:{type:keyword}}}}}}
}B:插入数据
PUT /movie_chn/movie/1
{ id:1,name:红海行动,doubanScore:8.5,actorList:[ {id:1,name:张译},{id:2,name:海清},{id:3,name:张涵予}]
}
PUT /movie_chn/movie/2
{id:2,name:湄公河行动,doubanScore:8.0,actorList:[ {id:3,name:张涵予}]
}PUT /movie_chn/movie/3
{id:3,name:红海事件,doubanScore:5.0,actorList:[ {id:4,name:张晨}]
}C:查询
GET /movie_chn/movie/_search
{query: {match: {name: 红海}}
}GET /movie_chn/movie/_search
{query: {term: {actorList.name: 张}}
}IK
IK分词器细粒度的拆分
1、ik_smart会将文本做最粗粒度的拆分例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」 2、ik_max_word会将文本做最细粒度的拆分例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」会穷尽各种可能的组合
GET _analyze
{analyzer: ik_smart,text: 中华人民共和国国歌
}GET _analyze
{analyzer: ik_max_word,text: 中华人民共和国国歌
}自定义ik词汇
1、进入elasticsearch/plugins/ik/config目录 2、新建一个myDict.dic文件编辑内容以utf8无bom保存, 如果不行加一些换行或者空出第一行 3、修改IKAnalyzer.cfg.xml(在ik/config目录下) 4、重启es