【ES】【elasticsearch】分布式搜索

文章目录

☀️安装elasticsearch

☀️1.部署单点es

🌸1.1.创建网络


因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:

sh 复制代码
docker network create es-net

🌸1.2.下载镜像


docker镜像官网https://hub.docker.com/search?q=elasticsearch

sh 复制代码
docker pull elasticsearch:7.12.1

🌸1.3.运行


运行docker命令,部署单点es:

sh 复制代码
docker run -d \
    --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称
  • -e "http.host=0.0.0.0":监听的地址,可以外网访问
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
  • -e "discovery.type=single-node":非集群模式
  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
  • --privileged:授予逻辑卷访问权
  • --network es-net :加入一个名为es-net的网络中
  • -p 9200:9200:端口映射配置

☀️2.部署kibana


kibana可以给我们提供一个elasticsearch的可视化界面

bash 复制代码
docker pull kibana:7.12.1

🌸2.1.部署


运行docker命令,部署kibana

sh 复制代码
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

kibana启动一般比较慢,需要多等待一会,可以通过命令:

sh 复制代码
docker logs -f kibana

查看运行日志,当查看到下面的日志,说明成功:

此时,在浏览器输入地址访问:http://ip:5601,即可看到结果

🌸2.2.DevTools


kibana中提供了一个DevTools界面:

这个界面中可以编写DSL来操作elasticsearch。并且对DSL语句有自动补全功能。

☀️3.安装IK分词器


🌸3.1.在线安装ik插件(较慢)


shell 复制代码
# 进入容器内部
docker exec -it es bash

# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

#退出
exit
#重启容器
docker restart es

🌸3.2.离线安装ik插件(推荐)


🌸1)查看数据卷目录


安装插件需要知道elasticsearch的plugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:

sh 复制代码
docker volume inspect es-plugins

显示结果:

json 复制代码
[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data 这个目录中。

🌸2)解压缩分词器安装包


下载分词器包: https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

重命名为ik

🌸3)上传到es容器的插件数据卷中


也就是/var/lib/docker/volumes/es-plugins/_data

🌸4)重启容器


shell 复制代码
# 4、重启容器
docker restart es
sh 复制代码
# 查看es日志
docker logs -f es

🌸5)测试:


IK分词器包含两种模式:

  • ik_smart:最少切分

  • ik_max_word:最细切分

json 复制代码
GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "疯狂星期四v50我"
}

结果:

json 复制代码
{
  "tokens" : [
    {
      "token" : "疯狂",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "星期四",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "v50",
      "start_offset" : 5,
      "end_offset" : 8,
      "type" : "LETTER",
      "position" : 2
    },
    {
      "token" : "我",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "CN_CHAR",
      "position" : 3
    }
  ]
}

🌸3.3 扩展词词典


随着互联网的发展,"造词运动"也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:"黑粉","爱坤" 等。

所以我们的词汇也需要不断的更新,IK分词器提供了扩展词汇的功能。

来试一把 , 可以看到根本识别不出来

json 复制代码
GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "我们都是爱坤,不是黑粉"
}

1)打开IK分词器config目录:

2)在IKAnalyzer.cfg.xml配置文件内容添加:

停止词字典也是一样的我这里就不一 一举例了

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>

3)新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改

properties 复制代码
爱坤
黑粉

4)重启elasticsearch

sh 复制代码
docker restart es

# 查看 日志
docker logs -f es
  1. 测试一下

可以看到非常完美的分词成功

☀️4.部署es集群


部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有4G的内存空间

首先编写一个docker-compose文件,内容如下:

sh 复制代码
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

Run docker-compose to bring up the cluster:

sh 复制代码
docker-compose up
相关推荐
ps酷教程2 小时前
elasticsearch学习(一)
学习·elasticsearch·jenkins
赵渝强老师3 小时前
【赵渝强老师】K8s的DaemonSets控制器
linux·docker·云原生·容器·kubernetes
江西昊仔3 小时前
Docker指令学习1
学习·docker·eureka
黄俊懿5 小时前
【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器
java·分布式·后端·spring cloud·微服务·架构·手写源码
无休居士5 小时前
分布式锁的几种方案对比?你了解多少种呢?
分布式
Kixuan2146 小时前
ES学习笔记
java·笔记·学习·elasticsearch·搜索引擎
丁总学Java6 小时前
分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)
分布式·lua
大田斗小木子7 小时前
Docker学习
学习·docker·容器
浪里小白龙597 小时前
分布式Id生成策略-美团Leaf
分布式
ACRELKY7 小时前
分布式光伏充换电站相关建议
分布式