一、es集群的配置搭建

准备三台服务器:192.168.81.130、192.168.81.131、192.168.81.132

1、修改每台主机的内核参数vm.max_map_count

编辑/etc/sysctl.conf

vm.max_map_count = 655350

然后执行sysctl -p

2、将es镜像pull下来,本文采用elasticsearch:7.1.1

docker部署es集群节点发现 docker 搭建es集群_跨域

 

 

3、编辑docker-compose.yaml文件

version: '3'
services:
  elasticsearch:                    # 服务名称
    image: elasticsearch:7.1.1      # 使用的镜像
    container_name: elasticsearch   # 容器名称
    restart: always                 # 失败自动重启策略
    environment:
      - node.name=node-130                   # 节点名称,集群模式下每个节点名称唯一
      - network.publish_host=192.168.81.130  # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
      - network.host=0.0.0.0                # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
      - discovery.seed_hosts=192.168.81.130,192.168.81.131,192.168.81.132          # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
      - cluster.initial_master_nodes=192.168.81.130,192.168.81.131,192.168.81.132  # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
      - cluster.name=es-cluster     # 集群名称,相同名称为一个集群, 三个es节点须一致
      # - http.cors.enabled=true    # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
      # - http.cors.allow-origin="*" # 表示支持所有域名      // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
      - bootstrap.memory_lock=true  # 内存交换的选项,官网建议为true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
    ulimits:        # 栈内存的上限
      memlock:
        soft: -1    # 不限制
        hard: -1    # 不限制
    volumes:
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
      - ./data:/usr/share/elasticsearch/data  # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。
    ports:
      - 9200:9200    # http端口,可以直接浏览器访问
      - 9300:9300    # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。

4、编辑elasticsearch.yml配置文件

network.host: 0.0.0.0
http.cors.enabled: true        # 是否支持跨域
http.cors.allow-origin: "*"    # 表示支持所有域名

5、初次运行的时候,注释掉compose文件中的volume,需要先运行起来,然后将容器中的data目录cp到宿主机上,否则报错

执行docker-compose up -d

然后执行docker cp elasticsearch:/usr/share/elasticsearch/data

6、然后执行docker-compose down,然后将compose文件中的volume选项打开再启动即可完成

7、访问web界面http://192.168.81.132:9200/_cluster/health?pretty

docker部署es集群节点发现 docker 搭建es集群_elasticsearch_02

docker部署es集群节点发现 docker 搭建es集群_跨域_03

 

 至此,es搭建完毕!

参考文献:

二、关于elasticsearch的分析器

参考文献:

1、空白字符分析器:whitespace

按空白字符 —— 空格、tabs、换行符等等进行简单拆分 —— 然后假定连续的非空格字符组成了一个语汇单元。

docker部署es集群节点发现 docker 搭建es集群_elasticsearch_04

 

 2、标准分析器:standard

使用 Unicode 文本分割算法 (定义来源于 Unicode Standard Annex #29)来寻找单词 之间 的界限,并且输出所有界限之间的内容。 Unicode 内含的知识使其可以成功的对包含混合语言的文本进行分词。

标点符号可能是单词的一部分,也可能不是,这取决于它出现的位置:

docker部署es集群节点发现 docker 搭建es集群_docker_05

 

 3、simple分析器:当它遇到只要不是字母的字符,就将文本解析成term,而且所有的term都是小写的。

docker部署es集群节点发现 docker 搭建es集群_elasticsearch_06

 

 4、stop分析器: stop 分析器 和 simple 分析器很像,唯一不同的是,stop 分析器增加了对删除停止词的支持。默认用的停止词是 _englisht_

(PS:意思是,假设有一句话“this is a apple”,并且假设“this” 和 “is”都是停止词,那么用simple的话输出会是[ this , is , a , apple ],而用stop输出的结果会是[ a , apple ],到这里就看出二者的区别了,stop 不会输出停止词,也就是说它不认为停止词是一个term)

(PS:所谓的停止词,可以理解为分隔符)

docker部署es集群节点发现 docker 搭建es集群_docker_07

 

 5、中英文分析器:smartCN

一个简单的中文或中英文混合文本的分词器

这个插件提供 smartcn analyzer 和 smartcn_tokenizer tokenizer,而且不需要配置

# 安装
bin/elasticsearch-plugin install analysis-smartcn
# 卸载
bin/elasticsearch-plugin remove analysis-smartcn

docker部署es集群节点发现 docker 搭建es集群_docker_08

 6、中文分词器:ik

参考:https://github.com/medcl/elasticsearch-analysis-ik

下面为Dockerfile

FROM elasticsearch:7.6.2
ADD https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip /usr/share/elasticsearch/plugins/ik/
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo 'Asia/Shanghai' > /etc/timezone \
  && cd /usr/share/elasticsearch/plugins/ik/ \
  && unzip elasticsearch-analysis-ik-7.6.2.zip \
  && rm -f elasticsearch-analysis-ik-7.6.2.zip

 7、curl命令对es的操作示例:

获取:curl -XGET 'http://localhost:9200/odin_device_device_collection'
删:curl -XDELETE 'http://localhost:9200/odin_device_device_collection'
插:curl -XPUT 'http://localhost:9200/odin_device_device_collection' -H 'Content-Type: application/json' -d '数据内容'
查:curl -XGET "http://localhost:9200/odin_device_device_collection/_doc/_search" -H 'Content-Type: application/json' -d'{"query": {"match_all": {}},"from": 0,"size": 300}'
清空:curl -XPOST "http://localhost:9200/odin_device_device_collection/_doc/_delete_by_query"  -H 'Content-Type: application/json' -d'{"query": {"match_all": {}}}'