前置说明
最近需要接手elasticsearch 6.8版本之前 之前使用过程中发现权限验证属于软件付费功能 6.8 7.X之后安全相关才是免费 找到得7以上得教程 目前b站找到教程如下:
狂神说
本笔记记录学习过程
安装
1、选择下载7.6.1安装链接
java 1.8 可参考我环境部署博文中 java模块
elasticsearch
logstash
kibana
想用docker 像docker低头 后面可能会补充docker安装步骤
2、linux安装
tar xvzf elasticsearch-7.6.1-linux-x86_64.tar.gz
tar xvzf kibana-7.6.1-linux-x86_64.tar.gz
tar xvzf logstash-7.6.1.tar.gz
3、window 安装
下载对应得版本zip elasticsearch,head,kibana包
elasticsearch
直接解压
启动前修改
elasticsearch.yml
#关闭权限验证我猜
xpack.ml.enabled: false
#head跨域解决
http.cors.enabled: true
http.cors.allow-origin: "*"
运行bin目录下得elasticsearch.bat 文件启动
浏览器打开验证是否安装成功
127.0.0.1:9200
head
head依赖python环境(本地已有npm环境安装步骤略)
命令行在head主目录下
npm install 安装报错
npm -g install phantomjs-prebuilt@2.1.16 --ignore-script
head 启动 npm run start
浏览器打开验证是否成功
127.0.0.1:9100
kibana
也是在bin目录下运行bat文件直接执行
默认端口5601
4、docker安装
执行操作扩大空间(不执行会因为空间不够启动不起来)
vi /etc/sysctl.conf
#加如下内容
vm.max_map_count=655360
#执行
sysctl -p
ulimit -u 65535
执行镜像下载(由于下载总是卡住 所以镜像下载和运行分开执行)
elasticsearch
docker pull elasticsearch:7.6.1
docker network create somenetwork
## 本地windows安装了 es了 不想端口冲突 就另外指了一个端口
docker run -d --name elasticsearch --net somenetwork -p 19200:9200 -p 19300:9300 -e "discovery.type=single-node" -e "bootstrap.memory_lock=true" -e "http.cors.enabled=true" -e "http.cors.allow-origin=*" -e ES_JAVA_OPTS="-Xms1g -Xmx1g" elasticsearch:7.6.1
## 添加挂载
mkdir /usr/share/elasticsearch/data
docker run -d --name elasticsearch --net somenetwork -p 19200:9200 -p 19300:9300 -e "discovery.type=single-node" -e "bootstrap.memory_lock=true" -e "http.cors.enabled=true" -e "http.cors.allow-origin=*" -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e LANG="C.UTF-8" -v /usr/share/elasticsearch/data --restart=always elasticsearch:7.6.1
docker logs elasticsearch
浏览器访问
宿主ip:19200
172.21.40.188:19200
kibana
docker pull kibana:7.6.1
docker run -d --name kibana --net somenetwork -p 5601:5601 --restart=always kibana:7.6.1
磁盘空间满了
先参考扩容
画个重点
创建加载点:mkdir /cm 挂载之后, 修改vi /etc/fstab 分区表文件,
在文件最后加上 /dev/sda3 /cm ext3 defaults 0 0 然后保存
不然重启后挂载盘就不见了别问我怎么知道
在参考移动docker路径
重启docker
执行镜像run报错
exec: “docker-proxy”: executable file not found in $PATH
参考错误处理
error: docker-runc not installed on system
参考错误处理
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service
由于我修改了elasticsearch出口端口
需要进入kibana镜像修改kibana配置
docker exec -it kibana /bin/sh
cd /config
vi kibana.yml
#修改端口 修改汉化
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.21.40.184:19200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
exit
访问对应ip端口
http://172.21.40.184:5601/
可以使用了
分词器安装
找到对应版本分词器地址
ik分词器
进入容器
docker exec -it elasticsearch /bin/sh
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip
网实在太差 我选择离线安装
传下载好的安装包去虚拟机
进入容器内部
docker exec -it elasticsearch /bin/sh
cd plugins
mkdir ik
exit
docker cp /orcas/software/elasticsearch-analysis-ik-7.1.0.zip es:/usr/share/elasticsearch/plugins/ik/
docker exec -it elasticsearch /bin/sh
cd /plugins/ik/
unzip elasticsearch-analysis-ik-7.1.0.zip
rm -rf elasticsearch-analysis-ik-7.1.0.zip
#解决容器乱码问题
cat << EOF > /root/.vimrc
:set encoding=utf-8
:set fileencodings=ucs-bom,utf-8,cp936
:set fileencoding=gb2312
:set termencoding=utf-8
EOF
exit
docker restart elasticsearch
重启docker
打开kibana测试分析器
http://172.21.40.184:5601/app/kibana#/dev_tools/console
开始学习
分词器简单使用
已ik分词器为例:
GET _analyze
{
"analyzer": "ik_smart",
"text": "最少切分"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "最细力度切分"
}
ik分词器添加自己的字典
进入docker镜像
docker exec -it elasticsearch /bin/sh
cd plugins/ik/config/
#创建自己的字典文件
vi my.dic
#保存记得设置文件编码格式不然自定义字典不生效
:set fileencoding=utf-8
#编写自己的字典
IKAnalyzer.cfg.xml
#吧字典文件配置添加到 ext_dict
退出镜像重启镜像
exit
词典生效
基本命令
创建索引
PUT /索引名/类型名/文档id
{ 请求体}
PUT /helo/type1/1
{
"name":"吴邪",
"age":3
}
后期会慢慢废弃类型名 创建提示建议使用语法如下
/{index}/_doc/{id}
/{index}/_doc
/{index}/_create/{id}
基本数据类型
字符串类型 text 、 keyword
数值类型 long, integer, short, byte, double, float, half_float, scaled_float
日期类型 date
te布尔值类型 boolean
二进制类型 binary
设置映射规则 关键字 mappings(设置规则)、properties(设置属性)、type(设置类型)
相当于建表
PUT /hello2
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
获取信息
获取索引信息: GET 索引(可以查看规则信息)
获取类型信息: GET 索引/类型(默认_doc)
获取某行具体文档数据: GET 索引/类型(默认_doc)/行id
GET hello2
不指定规则 直接设置数据也根据数据类型创建规则
通过_cat 可以获取一些es信息
GET _cat/health
GET _cat/indices?v
修改
修改可以用put 覆盖 返回值可以判断出时新增还是修改 版本号也会有体现 但是未提交字段数据会被清空
POST /索引/类型/文档id/_update
{“doc”:{“要修改属性”:“要修改值”}}
只修改对应字段 其他字段不影响
POST /hello3/_doc/1/_update
{
"doc":{
"name":"皮皮俑"
}
}
kibana 提示语法过时 我们尝试使用新版语法
/{index}/_update/{id}
POST /hello3/_update/1
{
"doc":{
"name":"皮皮俑修改"
}
}
删除
删除索引信息: DELETE 索引(可以查看规则信息)
删除类型信息: DELETE 索引/类型(默认_doc)
删除某行具体文档数据: DELETE 索引/类型(默认_doc)/行id
例子:
查询
先添加部分数据
PUT /els/user/1
{
"name":"",
"age":4,
"desc":""
"tags":["","",""]
}
简单查询
GET /{index}/{type}/{id}(后期会舍弃type类型)
GET /{index}/_doc/{id}
GET /{index}/_search?q=name:{parm}
复杂查询
字段匹配 某字段包含某语句的文档会呗查询出来
hit 查询出来的索引和文档信息
默认按照score排序 score 为匹配度
GET /{index}/_search
{
“query”: {
“match”: {
“FIELD”: “TEXT”
}
}
}
与query 并列添加,"_source": “{field}” 代表结果过滤
{
“query”: {
“match”: {
“FIELD”: “TEXT”
}
},
“_source”: “{field}”
}
排序 与query并列添加"sort": [{“FIELD”: {“order”: “desc”}}]
{
“query”: {
“match”: {
“FIELD”: “TEXT”
}
},
“sort”: [{“FIELD”: {“order”: “desc”}}],
“_source”: “{field}”
}
分页 与query并列添加"from": 0, “size”: 20
{
“query”: {
“match”: {
“FIELD”: “TEXT”
}
},
“sort”: [{“FIELD”: {“order”: “desc”}}],
“_source”: “{field}”,
“from”: 0,
“size”: 20
}
and 查询 bool must
GET /{index}/_search
{
“query”: {
“bool”: {
“must”: [
{
“match”: {
“FIELD”: “TEXT”
}
},{
“match”: {
“FIELD”: “TEXT”
}
}
]
}
}
}
or bool shoud
GET /{index}/_search
{
“query”: {
“bool”: {
“shoud”: [
{
“match”: {
“FIELD”: “TEXT”
}
},{
“match”: {
“FIELD”: “TEXT”
}
}
]
}
}
}
not bool must_not
GET /{index}/_search
{
“query”: {
“bool”: {
“must_not”: [
{
“match”: {
“FIELD”: “TEXT”
}
}
}
}
}
过滤器 与 filter 与must shoud must_not并列 可查询区间
,“filter”: {
“range”: {
“FIELD”: {
“gte”: 10,
“lte”: 20
}
}
}倒排索引精确查询 term
term 直接精确查询
match 使用分词器
text 会被分词器解析 keyword 不会用分词器解析
GET {index}/_search
{
“query”: {
“term”: {
“FIELD”: “test”
}
}
}
如果是test 类型会被解析 如果是keyword类型的字段 不会解析 term 会完全匹配才能查的出来
高亮与query并列 指定高亮字段 可添加前后缀
“highlight”: {
“pre_tags”: “”,
”,
“post_tags”: “
“fields”: {
“name”: {}
}
}
执行例子
GET /els/_search
{
"query": {
"match": {
"name": "吴邪"
}
}
}
GET /els/_search
{
"query": {
"match": {
"name": "吴邪"
}
},
"_source":["name","desc"]
}
GET /els/_search
{
"query": {
"match": {
"name": "吴邪"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source":["name","desc"]
}
GET /els/_search
{
"query": {
"match": {
"name": "吴邪"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source":["name","desc"],
"from": 0,
"size": 2
}
GET /els/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "吴邪"
}
},{
"match": {
"age": 3
}
}
]
}
}
}
GET /els/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "吴邪"
}
},{
"match": {
"age": 66
}
}
]
}
}
}
GET /els/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "吴邪"
}
},{
"match": {
"age": 66
}
}
]
}
}
}
GET /els/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"age": 66
}
}
]
}
}
}
GET /els/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": 66
}
}
],"filter": {
"range": {
"age": {
"gte": 4,
"lte": 80
}
}
}
}
}
}
GET /els/_search
{
"query": {
"match": {
"tags": "老 叔"
}
}
}
GET /els/_search
{
"query": {
"match": {
"name": "吴"
}
},"highlight": {
"pre_tags": "<p>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}
就这样了 要玩别的去了~