我们前面对ElasticSearch搜索api里的分析器、分词、分词过滤器、字符过滤器有了一个简单的学习,实际上在我们正式使用当中肯定要自定义分析器,系统自带的分析器可能是不能满足我们的业务需求。
我们还可能使用一些第三方的分词器,比如我们的中文分词怎么分。
自定义分析器
官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-custom-analyzer.html
回顾我们之前创建索引的方式:
PUT blog/users/101
{
"name":"jack"
}
这样会自动创建索引
blog
以及类型users
,其实这样是不太好的,正式创建的时候其实应该对一些更详细的信息进行设置:比如我们要设置好一个分析器,如果我们是中文内容,那么我们肯定要使用一些中文分词插件。如果没有中文,那么就没有必要使用中文分词器,所以我们可以针对不同的类型来使用不同的分词器。
备份索引
出现上面索引已经存在的问题怎么办呢?我们需要把这个索引给删掉(我们之间创建的索引没有指定分析器)。
我们先来学习一个“备份”功能,我们在实际开发当中需要对数据进行一个备份。
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html
按照官方文档,我们要先创建一个仓库,备份的东西全部放在这个仓库文件夹里面。
(因为我这里2个节点都在一个服务器上,所以不需要配置共享文件夹。实际生产环境肯定是多台服务器,仓库目录需要共享)
1、配置仓库路径
#每个节点elasticsearch.yml加入:
path.repo: ["/home/admin/esbackup"]
说明:admin
是我这里登录用户名,也是运行es实例等用户名。另外不要忘记在该目录下创建esbackup
目录。
配置好path.repo
之后,我们需要重启所有节点。
2、补充知识:关于重启kibana
fuser -n tcp 5601
可以看到进程id,kill -9 进程ID
杀掉。
fuser
可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、网络端口,并给出程序进程点详细信息(具体用法百度)。
3、创建仓库
PUT /_snapshot/mybackup
{
"type": "fs",
"settings": {
"location": "/home/admin/esbackup/blog"
}
}
创建一个名为mybackup
的仓库,位置是/home/admin/esbackup/blog
,其中的blog
是索引,给这个索引备份。
执行结果如下:
{
"acknowledged": true
}
true
代表创建成功。
同时我们也发现esbackup
目录下多了一个blog
目录。
但是blog
目录里什么都没有,是空的。
创建了仓库,我们就可以来获取这个仓库信息:
GET /_snapshot/mybackup
#注意`mybackup`是我们上面创建仓库的名称
4、开始备份索引
wait_for_completion=true
#备份本来是异步的,加这个参数就是我们需要等待备份完成的结果
#实际开发数据流大,不会这样搞
#我们这里学习演示 需要
现在我们来看看/home/admin/esbackup/blog
目录下,就多了一些文件了:
恢复索引之前,我们先删除索引
索引还存在的。
下面删除索引:
删除索引之后:
诶,删掉索引之后,我们现在可以重新创建索引了(加入分析器的方式)
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-custom-analyzer.html
PUT blog
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": ["lowercase"]
}
}
}
}
}
我们可以查看刚才创建的索引的设置:
恢复备份
现在我们把之前删掉的数据恢复出来(我们已经备份了)
1、关掉索引
POST blog/_close
2、正式恢复备份
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-snapshots.html
POST _snapshot/mybackup/bak1/_restore?wait_for_completion=true
{
"indices": "blog"
}
3、打开索引
POST blog/_open
最后我们发现之前备份的数据确实恢复啦: