ELK简介
什么是倒排索引
正常安装
docker安装集群ES
安装常见异常
安装Kibana
ES小玩儿
加IK分词器
ES支持拼音和中文分词
ES基本操作
ELK简介
Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。ELK采用的是合拢索引方式什么是倒排索引
正排索引从头查到尾 倒排索引分词后,记录每个文档出现过当前分词的序号,查询文档正排索引是从文档到关键字的映射(已知文档求关键字),倒排索引是从关键字到文档的映射(已知关键字求文档)。
文档内容:
序号 文档内容
1 小俊是一家科技公司创始人,开的汽车是奥迪a8l,加速爽。
2 小薇是一家科技公司的前台,开的汽车是保时捷911
3 小红买了小薇的保时捷911,加速爽。
4 小明是一家科技公司开发主管,开的汽车是奥迪a6l,加速爽。
5 小军是一家科技公司开发,开的汽车是比亚迪速锐,加速有点慢
倒排索引会对以上文档内容进行关键词分词,可以使用关键词直接定位到文档内容。
单词ID | 单词 | 倒排列表docId |
---|---|---|
1 | 小 | 1,2,3,4,5 |
2 | 一家 | 1,2,4,5 |
3 | 科技公司 | 1,2,4,5 |
4 | 开发 | 4,5 |
5 | 汽车 | 1,2,4,5 |
6 | 奥迪 | 1,4 |
7 | 加速爽 | 1,3,4 |
8 | 保时捷 | 2,3 |
9 | 保时捷911 | 2 |
10 | 比亚迪 | 5 |
从上表可以看出,每个单词在哪些文档中出现。假设查询“科技公司”,将1245条文档内容返回
一些面试题:
9200:提供给界面RESTFUL调用
9300:集群端口号(TCP协议)
ES乐观索 version CAS控制
每次更改version都会加1
我们在Linux下 Ubuntu 18.04 64位
安装JDK
正常安装
1、上传elasticsearch-6.4.3 配置 elasticsearch.ymlvi elasticsearch.yml
#本机IP
network.host: 192.168.0.1
#协议端口号
http.port: 9200 外部
启动
创建一个分组
修改虚拟内存
vi /etc/sysctl.conf 添加如下内容
vm.max_map_count=655360
sysctl -p 查询一下变化
再修改文件,在后面加四行
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
groupadd esmayikt
useradd esyushengjun -g esmayikt -p 123456
chown -R esyushengjun:esmayikt elasticsearch-6.4.3
su esyushengjun #切换用户
重启服务器即可
./elasticsearch
docker安装
安装 docker
拉elasticsearch镜像docker pull elasticsearch:6.8.15
cd /usr/local
mkdir -p es/config
cd es
mkdir data1
mkdir data2
mkdir data3
mkdir plugins1
mkdir plugins2
chmod 777 /usr/local/es/*
在es/config分别放入es1.yml、es2.yml
es1.yml
cluster.name: elasticsearch-cluster #三台必需一致
node.name: es-node1 #三台不一致
network.bind_host: 0.0.0.0
network.publish_host: 172.17.0.3 #本机ip
http.port: 9200 #三台不一致
transport.tcp.port: 9300 #三台不一致
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.17.0.3:9300","172.17.0.3:9301"] #所有集群点
discovery.zen.minimum_master_nodes: 1
es2.yml
cluster.name: elasticsearch-cluster #三台必需一致
node.name: es-node1 #三台不一致
network.bind_host: 0.0.0.0
network.publish_host: 172.17.0.3 #本机ip
http.port: 9201 #三台不一致
transport.tcp.port: 9301 #三台不一致
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["172.17.0.3:9300","172.17.0.3:9301"] #所有集群点
discovery.zen.minimum_master_nodes: 1
在/etc/sysctl.conf文件最后添加一行
vi /etc/sysctl.conf
vm.max_map_count=262144
执行/sbin/sysctl -p 立即生效
启动两台ES
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -p 5601:5601 -v /usr/local/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/plugins1:/usr/share/elasticsearch/plugins -v /usr/local/es/data1:/usr/share/elasticsearch/data --name ES01 elasticsearch:6.8.15
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /usr/local/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/es/plugins2:/usr/share/elasticsearch/plugins -v /usr/local/es/data2:/usr/share/elasticsearch/data --name ES02 elasticsearch:6.8.15
过两分钟后,测试下是否成功
curl 127.0.0.1:9200
如果是阿里云,外网访问记得打开端口
如果没有启动成功,查看下docker日志,参考常见异常解决
docker logs -f -t --tail=100 ES01
安装常见异常
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
或者
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] is
https://blog.csdn.net/xcc_2269861428/article/details/100186654
所有相关文件 chmod 777 *
在/etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
执行/sbin/sysctl -p 立即生效
之后再起启动就好了
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
- soft nofile 65536
- hard nofile 131072
- soft nproc 2048
- hard nproc 4096
安装Kibana
ES是没有前端的,Kibana可以作为ES的前端界面docker pull kibana:6.8.15
docker run -it -d -e ELASTICSEARCH_URL=http://172.17.0.2:9200 --name kibana --network=container:ES01 kibana:6.8.15
加IK分词器
我们的默认分词器非常不智能。比如阿里,就会被拆分成阿和里。而IK分词会把这些现代常用词进行拆分。https://github.com/medcl/elasticsearch-analysis-ik/releases
版本一定要正确
将文件解压后放到所有集群的文件夹plugins中
重启ES
加拼音分词器
我们查询阿里时,有时候我们输入的是ali。而查不到阿里中文。为了更智能,我们加上拼音分词器 https://github.com/medcl/elasticsearch-analysis-pinyin/tags找到对应的版本
将文件解压后放到所有集群的文件夹plugins中
重启ES
ES支持拼音和中文分词
1.自定义分词器 支持拼音和中文分词DELETE /goods
PUT /goods
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart_pinyin": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": ["my_pinyin", "word_delimiter"]
},
"ik_max_word_pinyin": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": ["my_pinyin", "word_delimiter"]
}
},
"filter": {
"my_pinyin": {
"type" : "pinyin",
"keep_separate_first_letter" : true,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
}
}
}
}
}
重新指定文档类型映射拼音分词类型
POST /goods/_mapping/goods
{
"goods": {
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"attribute_list": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"category_id": {
"type": "long"
},
"created_time": {
"type": "date"
},
"detail": {
"type": "text",
"analyzer":"ik_smart_pinyin",
"search_analyzer":"ik_smart_pinyin"
},
"id": {
"type": "long"
},
"main_image": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"analyzer":"ik_smart_pinyin",
"search_analyzer":"ik_smart_pinyin"
},
"revision": {
"type": "long"
},
"status": {
"type": "long"
},
"sub_images": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"subtitle": {
"type": "text",
"analyzer":"ik_smart",
"search_analyzer":"ik_smart"
},
"updated_time": {
"type": "date"
}
}
}
}
ES基本操作
###创建索引PUT /mymayikt
GET /mymayikt
###创建文档 /索引/类型/id
PUT /mymayikt/user/1
{
“name”:”mayikt”,
“age”:21,
“sex”:0
}
GET /mymayikt/user/1
DELETE /mymayikt
创建类型
PUT /goods
POST /goods/_mapping/goods
{
"goods": {
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"attribute_list": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"category_id": {
"type": "long"
},
"created_time": {
"type": "date"
},
"detail": {
"type": "text",
"analyzer":"ik_smart",
"search_analyzer":"ik_smart"
},
"id": {
"type": "long"
},
"main_image": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"type": "text",
"analyzer":"ik_smart",
"search_analyzer":"ik_smart"
},
"revision": {
"type": "long"
},
"status": {
"type": "long"
},
"sub_images": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"subtitle": {
"type": "text",
"analyzer":"ik_smart",
"search_analyzer":"ik_smart"
},
"updated_time": {
"type": "date"
}
}
}
}