服务器-docker-elasticsearch-Kibana-ik分词器 操作指引


->用于大数据搜索,文本相似度计算(BM25)
->参考资料:docker命令-菜鸟教程:https://www.runoob.com/docker/docker-architecture.html 及相关书籍

操作指引——在服务器里安装docker,并在docker中搭建es,kibana并使用ik分词器。

  1. 在服务器中安装docker
    docker -v查看docker版本

  2. 获取镜像 可以在dockerhub中找合适的版本,以Elasticsearch为例。
    docker pull elasticsearch:7.17.2
    docker pull elasticsearch 不写默认最新版本
    docker images -a 查看已拉取的镜像
    docker images 查看运行中的镜像

  3. 构建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 退出容器

  4. 容器与本地文件互传
    本地文件传入容器
    docker cp /root/mwb.json 1d1196d53e55:/usr/share/kibana
    容器传入本地opt目录下
    docker cp a6da08e70dc5:/opt/json /opt

  5. 部署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的管理界面
    服务器-docker-elasticsearch-Kibana-ik分词器 操作指引
    连不上的话修改ES中elasticsearch.yml
    在文件最后最后加上,解决跨域问题。

http.cors.enabled: true 
http.cors.allow-origin: "*"

改好后退出并重启es

  1. 安装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/
    服务器-docker-elasticsearch-Kibana-ik分词器 操作指引
    找到Management 中的Dev Tools,就进入了控制台。

  2. IK分词器
    es默认中文分词是逐字划分,要分析中文文本数据需要用到IK分词器。
    ik网址:https://github.com/medcl/elasticsearch-analysis-ik
    服务器-docker-elasticsearch-Kibana-ik分词器 操作指引
    重启es容器 docker restart es
    在kibana中输入

GET /_analyze
{"analyzer": "standard","text": "今天天气可真好啊!"}

没报错就说明安装成功.

  1. 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进行分词

  1. 创建索引
    服务器-docker-elasticsearch-Kibana-ik分词器 操作指引
  2. 先设置字段属性,插入字段以后就不能改变分词方式了.
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"
        }
   }   
}
}
  1. 插入数据
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

  1. 查询数据,并高亮显示
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": {}
    
    }
  }
}

  1. 删除索引
    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 命令直接打开

原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/245434.html

(0)
上一篇 2022年4月18日
下一篇 2022年4月18日

相关推荐

发表回复

登录后才能评论