ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-17 20:31:44  阅读:190  来源: 互联网

标签:index 容器 Kibana ik elasticsearch docker es


->用于大数据搜索,文本相似度计算(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的管理界面

    连不上的话修改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/

    找到Management 中的Dev Tools,就进入了控制台。

  2. IK分词器
    es默认中文分词是逐字划分,要分析中文文本数据需要用到IK分词器。
    ik网址:https://github.com/medcl/elasticsearch-analysis-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. 创建索引
  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 命令直接打开

标签:index,容器,Kibana,ik,elasticsearch,docker,es
来源: https://www.cnblogs.com/ls-notebook/p/16157141.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有