一、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
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
至此,es搭建完畢!
參考文獻:https://www.cnblogs.com/lz0925/p/12011026.html
二、關於elasticsearch的分析器
參考文獻:https://www.cnblogs.com/cjsblog/p/10171695.html
1、空白字符分析器:whitespace
按空白字符 —— 空格、tabs、換行符等等進行簡單拆分 —— 然后假定連續的非空格字符組成了一個語匯單元。
2、標准分析器:standard
使用 Unicode 文本分割算法 (定義來源於 Unicode Standard Annex #29)來尋找單詞 之間 的界限,並且輸出所有界限之間的內容。 Unicode 內含的知識使其可以成功的對包含混合語言的文本進行分詞。
標點符號可能是單詞的一部分,也可能不是,這取決於它出現的位置:
3、simple分析器:當它遇到只要不是字母的字符,就將文本解析成term,而且所有的term都是小寫的。
4、stop分析器: stop 分析器 和 simple 分析器很像,唯一不同的是,stop 分析器增加了對刪除停止詞的支持。默認用的停止詞是 _englisht_
(PS:意思是,假設有一句話“this is a apple”,並且假設“this” 和 “is”都是停止詞,那么用simple的話輸出會是[ this , is , a , apple ],而用stop輸出的結果會是[ a , apple ],到這里就看出二者的區別了,stop 不會輸出停止詞,也就是說它不認為停止詞是一個term)
(PS:所謂的停止詞,可以理解為分隔符)
5、中英文分析器:smartCN
一個簡單的中文或中英文混合文本的分詞器
這個插件提供 smartcn analyzer 和 smartcn_tokenizer tokenizer,而且不需要配置
# 安裝 bin/elasticsearch-plugin install analysis-smartcn # 卸載 bin/elasticsearch-plugin remove analysis-smartcn
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": {}}}'