服务器-docker-elasticsearch-Kibana-ik分词器 操作指引
作者:互联网
->用于大数据搜索,文本相似度计算(BM25)
->参考资料:docker命令-菜鸟教程:https://www.runoob.com/docker/docker-architecture.html 及相关书籍
操作指引——在服务器里安装docker,并在docker中搭建es,kibana并使用ik分词器。
-
在服务器中安装docker
docker -v
查看docker版本 -
获取镜像 可以在dockerhub中找合适的版本,以Elasticsearch为例。
docker pull elasticsearch:7.17.2
docker pull elasticsearch
不写默认最新版本
docker images -a
查看已拉取的镜像
docker images
查看运行中的镜像 -
构建es容器
docker run -d --name es -p 9200:9200 -p 9300:9300 --network es-net -e "discovery.type=single-node" elasticsearch:7.17.2
容器名为es 网络为es-net,以便后续Kibana部署
docker ps -a
查看创建的所有容器
docker ps
查看运行中的容器
docker exec -it 容器ID /bin/bash
进入容器
docker exec -it es /bin/bash
输入容器名也行
exit
退出容器 -
容器与本地文件互传
本地文件传入容器
docker cp /root/mwb.json 1d1196d53e55:/usr/share/kibana
容器传入本地opt目录下
docker cp a6da08e70dc5:/opt/json /opt
-
部署ElasticSearch-Head
docker pull mobz/elasticsearch-head:5
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
登录 http://服务器IP:9100/ 就可以看到es的管理界面
连不上的话修改ES中elasticsearch.yml
在文件最后最后加上,解决跨域问题。
http.cors.enabled: true
http.cors.allow-origin: "*"
改好后退出并重启es
-
安装kibana 可以更好的查询展示数据
(可选,如果通过python等直接调用es就不用安装)
必须要和es相同版本
docker pull kibana:7.17.2
docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://es:9200 --network=es-net -p 5601:5601 kibana:7.17.2
和es放到一个网络中es-net省去文件配置
登录http://服务器IP:5601/
找到Management 中的Dev Tools,就进入了控制台。 -
IK分词器
es默认中文分词是逐字划分,要分析中文文本数据需要用到IK分词器。
ik网址:https://github.com/medcl/elasticsearch-analysis-ik
重启es容器docker restart es
在kibana中输入
GET /_analyze
{"analyzer": "standard","text": "今天天气可真好啊!"}
没报错就说明安装成功.
- Python调用es
from elasticsearch import Elasticsearch
index_name = 'my_index' #索引名
es = Elasticsearch(
['服务器IP:9200'],
#节点没有响应时,进行刷新,重新连接
sniff_on_connection_fail=True,
#每 60 秒刷新一次
sniffer_timeout=60
)
body = {
"query": {
"match": {
"cont": "今天的天气真不错!"
}
}
}
requ_data= es.search(index=index_name, body=body)
print(requ_data)
一些ES创建查询语句、使用ik进行分词
- 创建索引
- 先设置字段属性,插入字段以后就不能改变分词方式了.
PUT /my_index
{
"mappings": {
"properties": {
"post": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"repost": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
}
- 插入数据
POST /my_index/_bulk
{ "index": { "_id": "1"} }
{ "cont": "杭州的天气真好啊!" }
{ "index": { "_id": "2"} }
{ "cont": "我喜欢下雪天的西湖。" }
{ "index": { "_id": "3"} }
{ "cont": "我也不知道你在说什么,反正干就完事儿!" }
或者搞成json文件批量导入es数据
{ "create" : { "_index" : "my_index", "_id" : " 1110432760" }}
{ "uid" : "1110432760", "cont" : "今晚吃啥呢?"}
{ "create" : { "_index" : "my_index", "_id" : " 1113428580" }}
{ "uid" : "1113428580", "cont" : "我觉得吃火锅就挺好"}
把数据处理成这种JSON格式,最后一行也要加空格,一条数据要放在一行。
s= "".join(s.split())
处理文本
将处理好的JSON文件放到Kibana容器里,每个文件最好保持在5-15M.
curl -H "Content-Type: application/json" -XPOST http://服务器IP:9200/uwb02/usi/_bulk --data-binary @uwb.json
- 查询数据,并高亮显示
GET /my_index/_search
{
"query": {
"match": {
"cont": "我喜欢喝西湖龙井!"
}
},
"highlight": {
"fields": {
"cont": {}
}
}
}
多个字段一起查询
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"post": {
"query": "中国真美",
"boost": 2
}
}
},
{
"match": {
"repost": "中国真美"
}
}
]
}
}
,
"highlight": {
"fields": {
"post": {},
"repost": {}
}
}
}
- 删除索引
DELETE /my_index
修改docker存储位置
参考链接:
https://blog.51cto.com/u_15499155/5044316
https://baijiahao.baidu.com/s?id=1705154291503534578&wfr=spider&for=pc
sudo docker info | grep "Docker Root Dir"
查看当前docker位置
service docker stop
停掉docker
mv /var/lib/docker /root/data/docker
移动dokcer
ln -s /root/data/docker /var/lib/docker
建立软连接
systemctl restart docker
重启docker
常见错误处理
docker容器内使用apt报错 E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission
使用root权限进入docker
docker exec -u 0 -it 容器名 /bin/bash
# 0 表示root
没有vim问题
apt-get update
apt-get upgrade
apt-get install vim
vi 命令直接打开
标签:index,容器,Kibana,ik,elasticsearch,docker,es 来源: https://www.cnblogs.com/ls-notebook/p/16157141.html