ES相关知识

database

ElkStack介绍

对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展示),我们将这三个组合起来的技术称之为ELKStack,所以说ELKStack指的是Elasticsearch、Logstash、Kibana技术栈的结合

Elasticsearch

什么是全文检索和lucene?

基于java环境,基于Lucene之上包装一层外壳

Lucene是一个java的搜索引擎库,操作非常繁琐

全文检索和倒排索引:

数据里里的标题:

1.老男孩教育 1

2.老男孩教育linux学院 1 1 1

3.老男孩教育python学院 1 1

4.老男孩教育DBA 1 1

5.老男孩教育oldzhang 1

ES内部分词,评分,倒排索引:

老男孩 1 2 3 4 5

教育 1 2 3 4 5

学院 2 3

linux 2

python 3

DBA 4

用户输入:

老男孩学院

linux老男孩学院DBA

Elasticsearch应用场景

1.搜索: 电商,百科,app搜索

2.高亮显示: github

3.分析和数据挖掘: ELK

Elasticsearch特点

1.高性能,天然分布式

2.对运维友好,不需要会java语言,开箱即用

3.功能丰富

Elasticsearch在电商搜索的实现

mysql:

skuid name

1 狗粮100kg

2 猫粮50kg

3 猫罐头200g

ES:

聚合运算之后得到SKUID:

拿到ID之后,mysql就只需要简单地where查询即可

mysql:

select xx from xxx where skuid 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

2.安装jdk

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)

3.安装ES

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

索引

类型

字段

项 key

文档

es交互方式

三种交互方式

curl命令:

最繁琐

最复杂

最容易出错

不需要安装任何软件,只需要有curl命令

es-head插件:

查看数据方便

操作相对容易

需要node环境

kibana:

查看数据以及报表格式丰富

操作很简单

需要java环境和安装配置kibana

es-head插件安装

==注意:需要修改配置文件添加允许跨域参数==

修改ES配置文件支持跨域

/etc/elasticsearch/elasticsearch.yml

http.cors.enabled: true

http.cors.allow-origin: "*"

es-head 三种方式:

1.npm安装方式

  • 需要nodejs环境
  • 需要连接国外源

2.docker安装

3.google浏览器插件(不需要配置跨域也可以)

  • 修改文件名为zip后缀
  • 解压目录
  • 拓展程序-开发者模式-打开已解压的目录
  • 连接地址修改为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-head界面(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格式 

恢复的时候,如果已经存在相同的数据,会被覆盖掉

如果新增加的数据,则不影响,继续保留

以上是 ES相关知识 的全部内容, 来源链接: utcz.com/z/532300.html

回到顶部