ElkStackはじめに
ログ、最も一般的な要件を収集することで、店舗、クエリ、表示、まさにオープンソースコミュニティ、オープンソース・プロジェクトに対応するために:logstash(コレクト)、elasticsearch(店舗+検索)、kibana(ショー)、我々は、これら3つを持っていますその手段は、ELKStackと呼ばれる技術を組み合わせるようELKStackのelasticsearch、Logstash、Kibanaテクノロジ・スタック
Elasticsearch
フルテキスト検索とLuceneのは何ですか?
Luceneの包装層のシェルに基づいてJavaベースの環境で、
Lucene検索エンジンは、操作が非常に煩雑であり、Javaのライブラリです
フルテキスト検索と転置インデックス:
どこタイトルのデータ:
オールドボーイズ1 1.教育
教育111の2オールドボーイズのLinux研究所
教育11の研究所のpython 3.オールドボーイズ
4.オールドボーイズ11教育DBA
5.オールドボーイズ教育oldzhang 1
単語、スコア、転置インデックスでESの一部:
オールドボーイズ12345
学歴12345
大学3 2
Linuxの2
のPython 3
DBA 4
ユーザ入力:
大学オールドボーイズ
のlinux DBA大学オールドボーイズ
Elasticsearchシナリオ
1.検索:電気の供給業者、ウィキペディア、アプリの検索
2.ハイライト:GitHubに
3.分析とデータマイニング:ELK
Elasticsearch特長
1.高性能、自然に分散
2.運用・保守友好と箱から出して、Java言語を必要としません
。3.豊富な機能を備えました
Elasticsearchは、電気事業検索で達成しました
MySQLの:
名前SKUID
。1 100キロ犬
2猫50キロ
。3缶詰猫200グラム
ES:
SKUIDを得るための重合操作の後:
IDの後に取得するには、MySQLはどこに簡単に問い合わせることができます
:MySQLの
SKUID XXX XXからSELECTを1。
ESのインストールが開始され(好ましくは時間が同期)
他のソフトウェアを停止0
systemctl stop docker
iptables -nL
iptables -F
iptables -X
iptables -Z
iptables -nL
查看索引
curl -s 127.0.0.1:9200/_cat/indices
ソフトウェアをダウンロードしてください1.
mkdir /data/soft
[root@db-01 /data/soft]# ll -h
total 268M
-rw-r--r-- 1 root root 109M Feb 25 2019 elasticsearch-6.6.0.rpm
-rw-r--r-- 1 root root 159M Sep 2 16:35 jdk-8u102-linux-x64.rpm
JDKをインストールします。2.
rpm -ivh jdk-8u102-linux-x64.rpm
[root@db-01 /data/soft]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
ESのインストール3.
rpm -ivh elasticsearch-6.6.0.rpm
4.チェック
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
netstat -lntup|grep 9200
[root@db01 /data/soft]# curl 127.0.0.1:9200
{
"name" : "pRG0qLR",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "mNuJSe07QM61IOxecnanZg",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
ESは、ブートを設定します
1.どの構成チェックES
[root@db01 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml #ES的主配置文件
/etc/elasticsearch/jvm.options #jvm虚拟机配置
/etc/sysconfig/elasticsearch #默认一些系统配置参数
/usr/lib/sysctl.d/elasticsearch.conf #配置参数,不需要改动
/usr/lib/systemd/system/elasticsearch.service #system启动文件
2.カスタムプロファイル
cp /etc/elasticsearch/elasticsearch.yml /opt/
cat >/etc/elasticsearch/elasticsearch.yml<<EOF
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
EOF
再起動サービス発見エラーの後に3
systemctl restart elasticsearch.service
4.メモリー・ロックへの対処に失敗しました:
查看日志发现提示内存锁定失败
[root@db01 ~]# tail -f /var/log/elasticsearch/elasticsearch.log
[2019-11-14T09:42:29,513][ERROR][o.e.b.Bootstrap ] [node-1] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
解决方案:
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
systemctl daemon-reload
systemctl restart elasticsearch.service
関係を持つES mysqlのコントラスト
mysqlの | これは |
---|---|
倉庫 | 指数 |
テーブル | タイプ |
フィールド | アイテムのキー |
行 | ファイル |
対話モードをES
相互作用の三種類の
カールコマンド:
最も退屈
かつ最も複雑な
ほとんどのエラーが発生しやすいの
任意のソフトウェアをインストールする必要がある、唯一のcurlコマンドを持っています
ES-ヘッドプラグ:
チェック・データは容易にするために
動作することは比較的容易
な環境ノードニーズを
kibana:
データを表示し、レポート形式の豊富な
操作は非常に簡単で
ニーズのJava環境とインストール構成kibana
ES-頭プラグ取付
==注意:クロスドメインパラメータを許可するように追加するには、設定ファイルを変更する必要があります==
ESのサポートクロスドメインの設定ファイルを変更します。
/etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
3つの方法でES-ヘッド:
1.npmインストール
- 必要nodejs環境
- あなたは外国人のソースを接続する必要があります
2.dockerインストール
3.googleブラウザプラグイン(クロスドメインすることができますを設定する必要はありません)
- ファイル名の接尾辞郵便番号を変更します。
- 解凍したディレクトリ
- プログラムを展開 - 開発者モードで - オープン解凍したディレクトリ
- 接続アドレスは、ESのIPアドレスに変更します
具体操作命令
Head插件在5.0以后安装方式发生了改变,需要nodejs环境支持,或者直接使用别人封装好的docker镜像
插件官方地址
https://github.com/mobz/elasticsearch-head
使用docker部署elasticsearch-head
docker pull alivv/elasticsearch-head
docker run --name es-head -p 9100:9100 -dit elivv/elasticsearch-head
传统安装使用nodejs编译安装elasticsearch-head
cd /opt/
wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz
tar xf node-v12.13.0-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
vim /etc/profile
PATH=$PATH:/opt/node/bin
source profile
npm -v
node -v
git clone git://github.com/mobz/elasticsearch-head.git
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
npm run start &
ES-ヘッドインタフェース(10.0.0.51:9100、10.0.0.1:9200接続)
kibana ESへの相互作用を持ちます
1.安装kibana
rpm -ivh kibana-6.6.0-x86_64.rpm
2.配置kibana(跟es装在同一台机器上)
[root@db-01 /data/soft]# grep "^[a-Z]" /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.51"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
3.启动kibana
systemctl start kibana
systemctl status kibana -l #查看状态
4.操作ES
Dev Tools
kibana界面(10.0.0.51:5601)
插入数据(处理问题)
1.使用自定义的ID
PUT oldzhang/info/1
{
"name": "zhang",
"age": "29"
}
2.使用随机ID
POST oldzhang/info/
{
"name": "zhang",
"age": "29",
"pet": "xiaoqi"
}
3.和mysql对应关系建议单独列一个字段(解决延时问题)
POST oldzhang/info/
{
"uid": "1",
"name": "ya",
"age": "29"
}
查询数据
1.简单查询
GET /oldzhang/_search
GET /oldzhang/_search/1
2.单个条件查询
GET /oldzhang/_search
{
"query" : {
"term" : { "job" : "it" }
}
}
3.多个条件查询
GET /oldzhang/_search
{
"query" : {
"bool": {
"must": [
{"match": {"pet": "xiao10"}},
{"match": {"name": "yaz"}}
],
"filter": {
"range": {
"age": {
"gte": 27,
"lte": 30
}
}
}
}
}
}
}
4.查询方式
- curl命令
- es-head 基础查询多个条件
- es-head 左侧字段查询
- kibana dev-tools 命令查询
- kibana 索引查询
更新数据
GET oldzhang/info/1
PUT oldzhang/info/1
{
"name": "zhang",
"age": "30",
"job": "it"
}
POST oldzhang/info/1
{
"name": "zhang",
"age": "30",
"job": "it"
}
删除数据
1.删除指定ID的数据
DELETE oldzhang/info/1
2.删除符合条件的数据
POST oldzhang/_delete_by_query
{
"query" : {
"match":{
"age":"29"
}
}
}
3.删除索引
DELETE oldzhang
4.!!!警告!!!
尽量不要在命令行或者Kibana里删除,因为没有任何警告
建议使用es-head删除
生产环境可以先把索引关闭掉,如果一段时间没人访问了再删除
工作中删除ES索引流程
1.先关闭需要删除的索引
2.如果有业务在用,开发回来找你
3.业务迁移完成后,再次关闭
4.假如关闭之后等了一个星期还没有人来找你
5.写邮件给领导,交代清楚所有流程,等回复
6.删除之前备份一份,然后删除
删除索引推荐(变灰)
集群的相关名词
1.集群健康状态
绿色: 所有数据都完整,并且副本数满足
黄色: 所有数据都完整,但是有的索引副本数不满足
红色: 有的数据不完整
2.节点类型
主节点: 负责调度数据分配到哪个节点
数据节点: 负责处理落到自己身上的数据
默认: 主节点同时也是数据节点
3.数据分片
主分片: 实际存储的数据,负责读写,粗框的是主分片
副本分片: 主分片的副本,提供读,同步主分片,细框的是副本分片
4.副本:
主分片的备份,副本数量可以自定义
部署es集群
1.安装java
rpm -ivh jdk-8u102-linux-x64.rpm
2.安装ES
rpm -ivh elasticsearch-6.6.0.rpm
3.配置ES配置文件
配置内存锁定:
systemctl edit elasticsearch.service
[Service]
LimitMEMLOCK=infinity
集群配置文件:
b01配置文件:
cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
discovery.zen.minimum_master_nodes: 1
EOF
==================================================================
db02配置文件:
cat> /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.52,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]
discovery.zen.minimum_master_nodes: 1
EOF
4.启动
systemctl daemon-reload
systemctl restart elasticsearch
5.查看日志
tail -f /var/log/elasticsearch/linux5.log
6.ES-head查看是否有2个节点
es集群相关注意
注意事项:
1.插入和读取数据在任意节点都可以执行,效果一样
2.es-head可以连接集群内任一台服务
3.主节点负责读写
如果主分片所在的节点坏掉了,副本分片会升为主分片
4.主节点负责调度
如果主节点坏掉了,数据节点会自动升为主节点
查看集群各种信息
GET _cat/nodes
GET _cat/health
GET _cat/master
GET _cat/fielddata
GET _cat/indices
GET _cat/shards
GET _cat/shards/oldzhang
扩容第三台机器
1.安装java
rpm -ivh jdk-8u102-linux-x64.rpm
2.安装ES
rpm -ivh elasticsearch-6.6.0.rpm
3.配置内存锁定
systemctl edit elasticsearch.service
[Service]
LimitMEMLOCK=infinity
4.db03集群配置文件
cat > /etc/elasticsearch/elasticsearch.yml <<EOF
cluster.name: linux5
node.name: node-3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.53,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.53"]
discovery.zen.minimum_master_nodes: 1
EOF
5.启动
systemctl daemon-reload
systemctl restart elasticsearch
集群注意事项
集群配置文件
1同一个集群的所有成员,集群名称要一样
2.节点名称每个主机都不一样
3.选举相关参数,所有可能成为master的节点数/2+1=集群的大多数
注意1:发现节点参数不需要把集群内所有的机器IP都加上
只需要包含集群内任意一个IP和自己的IP就可以
discovery.zen.ping.unicast.hosts: ["10.0.0.51","10.0.0.53"]
注意2: 集群选举相关的参数需要设置为集群节点数的大多数
discovery.zen.minimum_master_nodes: 2
注意3: 默认创建索引为1副本5分片
注意4: 数据分配的时候会出现2中颜色
紫色: 正在迁移
黄色: 正在复制
绿色: 正常
注意5: 3节点的时候
0副本一台都不能坏
1副本的极限情况下可以坏2台: 1台1台的坏,不能同时坏2台
2副本的情况,发现节点数为1,可以同时坏2台
注意6:集群指令可以在集群内任意一个节点执行
通讯端口防火请要放行
9200 9300
监控状态不能只监控颜色(稳定状态下,监控颜色和节点数)
动态修改最小发现节点数(临时,出问题时动态改不了)
GET _cluster/settings
PUT _cluster/settings
{
"transient": {
"discovery.zen.minimum_master_nodes": 2
}
}
自定义副本分片和索引
索引为2副本3分片
索引为0副本5分片
注意:
索引一旦建立完成,分片数就不可以修改了
但是副本数可以随时修改
命令:
1.创建索引的时候就自定义副本和分片
PUT /yayayaay/
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
}
}
2.修改单个索引的副本数(坏两台,其他索引丢数据)
PUT /oldzhang/_settings/
{
"settings": {
"number_of_replicas": 0
}
}
3.修改所有的索引的副本数
PUT /_all/_settings/
{
"settings": {
"number_of_replicas": 0
}
}
工作如何设置:
2个节点: 默认就可以
3个节点: 重要的数据,2副本 不重要的默认
日志收集: 1副本3分片
监控
监控注意,不能只监控集群状态
1.监控节点数
2.监控集群状态
3.2者任意一个发生改变了都报警
监控命令: curl -s 127.0.0.1:9200/_cat/
GET _cat/nodes
GET _cat/healt
增强插件x-pack监控功能
前提:同步时间,集群有警告,不影响集群
monitoring-->点一下蓝色图标
优化
1.内存
不要超过32G
48内存
系统留一半: 24G
自己留一半: 24G
8G 12G 16G 24G 30G
当前业务量 4G
先给 8G
满了之后先别急的加内存,询问开发和老大,是不是我们的使用问题
加到 12G
满了之后先别着急加内存,询问开发和老大,是不是使用的问题
加16G 20G 24G 所有内存一半
要给老大打招呼,我们已经用到系统的一半内存了
官方建议不要超过30G,要考虑加机器了
2.硬盘的优化
RAID0 ssd
利用了ES集群本身的高可用优势来弥补ssd硬盘和raid0的风险
兼顾速度和安全,比较费钱
3.代码的优化
4.升级大版本
4.升级大版本
- 更新很多新功能
- 性能都会得到大幅提升
- 提前测试好
- 升级的风险
- 数据丢失的风险
- 功能的改变,代码需要修改
- 滚动升级
5.必杀技
加机器 money$$$$$$
集群发现相关参数
#跨机房调大点
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s
超时时间为120s
重试次数为6次
每次间隔30秒
中文分词
未分词的情况:
1.插入测试数据
curl -XPOST http://localhost:9200/index/_create/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/_create/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/_create/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/_create/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
2.检测
curl -XPOST http://localhost:9200/index/_search -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'
分词配置
1.配置中文分词器
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
2.创建索引
curl -XPUT http://localhost:9200/news
3.创建模板
curl -XPOST http://localhost:9200/news/text/_mapping -H 'Content-Type:application/json' -d'
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}'
4.插入测试数据
POST /news/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news/text/2
{"content":"公安部:各地校车将享最高路权"}
POST /news/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
5.再次查询数据发现已经能识别中文了
POST /news/_search
{
"query" : { "match" : { "content" : "张亚" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
中文分词
未分词的情况
1.插入测试数据
POST /news/txt/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news/txt/2
{"content":"公安部:各地校车将享最高路权"}
POST /news/txt/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news/txt/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
2.检测
POST /news/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
分词配置
0.前提条件
- 所有的ES节点都需要安装
- 所有的ES都需要重启才能生效
1.配置中文分词器
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
本地文件安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///XXX/elasticsearch-analysis-ik-6.6.0.zip
重启
2.创建索引
PUT /news1
3.创建模板
POST /news1/text/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
ik_smart:粗略的分词
ik_max_word:比较精细的分词
4.插入测试数据
POST /news1/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news1/text/2
{"content":"公安部:各地校车将享最高路权"}
POST /news1/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news1/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
5.再次查询数据发现已经能识别中文了
POST /news1/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
重新查数据的原理图
安装报错总结
1.集群内所有的机器没有全部都安装插件
2.执行完命令不看提示,安装失败了不知道
3.创建的索引和搜索的索引名称不是一个
4.创建模版之前要先单独创建索引
5.安装包上传不完整导致安装失败
6.ES节点配置不统一
7.修改完没有全部重启
8.字典也一样
手动更新字典
1.创建字典
vi /etc/elasticsearch/analysis-ik/main.dic
2.把字典发送到集群内所有的机器
scp main.dic 10.0.0.52:/etc/elasticsearch/analysis-ik/
3.重启所有的ES节点!!!
systemctl restart elasticsearch
4.更新索引的数据
POST /news2/text/5
{"content":"昨天胖虎很嚣张,让张亚请他吃饭"}
5.搜索测试
POST /news2/_search
{
"query" : { "match" : { "content" : "胖虎" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
热更新中文分词库
原理图(F12>>>>ETag会改变)
1.安装nginx
[root@db01 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum makecache fast
yum -y install nginx
2.配置nginx
[root@db01 nginx]# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/;
charset utf-8;
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
}
}
nginx -t
systemctl start nginx
3.写字典
[root@db01 nginx]# cat /usr/share/nginx/html/my.txt
我
中国
日本
打发
台湾
小日本
伊朗
时间
滚蛋
王总
4.配置es的中文分词器插件
vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.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"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">http://10.0.0.51/my.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
5.将修改好的IK配置文件复制到其他所有ES节点
scp /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml 10.0.0.53:/etc/elasticsearch/analysis-ik/
6.重启所有的ES节点
systemctl restart elasticsearch
7.查看日志里字典的词有没有加载出来
tail -f /var/log/elasticsearch/linux5.log
8.打开es日志,然后更新字典内容,查看日志里会不会自动加载
9.搜索测试验证结果
POST /news2/text/6
{"content":"昨天胖虎很嚣张,把班长打了一顿并让班长请他吃饭"}
POST /news2/_search
{
"query" : { "match" : { "content" : "班长" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
测试是否更新
echo "武汉" >> /usr/share/nginx/html/my.txt
10.电商上架新产品流程(先更新字典,在插入数据)
- 先把新上架的商品的关键词更新到词典里
- 查看ES日志,确认新词被动态更新了
- 自己编写一个测试索引,插入测试数据,然后查看搜索结果
- 确认没有问题之后,在让开发插入新商品的数据
- 测试
备份恢复
0.前提条件
必须要有Node环境和npm软件
nodejs
npm
1.nodejs环境安装(注意路径的存放)
cd /opt
weget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar xf node-v10.16.3-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
echo "export PATH=/opt/node/bin:\$PATH" >> /etc/profile
source /etc/profile
[root@db-01 ~]# node -v
v10.16.3
[root@db-01 ~]# npm -v
6.9.0
2.指定使用国内淘宝npm源
npm install -g cnpm --registry=https://registry.npm.taobao.org
3.安装es-dump
cnpm install elasticdump -g
4.备份命令
备份成可读的json格式
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data
备份成压缩格式(恢复先解压gzip -d ,在恢复)
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=$|gzip > /data/news2.json.gz
备份分词器/mapping/数据一条龙服务(先恢复mapping表空间,在恢复数据)不同节点之间也可以备份恢复
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_analyzer.json \
--type=analyzer
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_mapping.json \
--type=mapping
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data
5.恢复命令
只恢复数据
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2
恢复所有数据包含分词器/mapping一条龙
elasticdump \
--input=/data/news2_analyzer.json \
--output=http://10.0.0.51:9200/news2 \
--type=analyzer
elasticdump \
--input=/data/news2_mapping.json \
--output=http://10.0.0.51:9200/news2 \
--type=mapping
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2
--type=data
批量备份
curl -s 127.0.0.1:9200/_cat/indices|awk '{print $3}'
6.备份恢复注意
恢复的时候需要先解压缩成json格式
恢复的时候,如果已经存在相同的数据,会被覆盖掉
如果新增加的数据,则不影响,继续保留