您的位置:首页 > 其它

ElasticSearch速学 - IK中文分词器 、elasticdump数据导出导入、字段分词

2017-04-29 15:18 716 查看
我们前面简单的学习了
分析器
,包含了分词器、过滤器、字符过滤器等等。

这些内置的分析器很多时候并不能满足我们的需求,比如处理中文的时候。

比较流行的中文分析器组件

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

安装maven

1、maven官网

http://maven.apache.org/download.cgi

2、下载地址

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz[/code] 


3、解压

tar zxvf apache-maven-3.5.0-bin.tar.gz


解压完成目录名称是
apache-maven-3.5.0
,该目录下还有以下文件或目录:

bin  boot  conf  lib  LICENSE  NOTICE  README.txt




4、配置

需要配置环境变量,这里对当前用户进行修改,你要修改
/etc/profile
也可以。

vi ~/.bash_profile
#加入
export M2_HOME=~/apache-maven-3.5.0 #这个目录改成你自己的目录
#修改PATH
PATH=$PATH:$HOME/bin:$M2_HOME/bin




保存并退出之后,执行:

source ~/.bash_profile


5、查看maven是否安装成功

mvn --version




下载IK分词器

https://github.com/medcl/elasticsearch-analysis-ik/releases

安装文档下载对应版本,这里用的版本是5.3.0。

我们下载源码(熟悉一下maven)

wget https://github.com/medcl/elasticsearch-analysis-ik/archive/v5.3.0.tar.gz --no-check-certificate
#解压
tar zxvf v5.3.0.tar.gz
#进入目录
cd elasticsearch-analysis-ik-5.3.0




mvn package -e
#用maven编译项目,生成target目录,
#编译、测试代码,生成测试报告,生成jar/war文件


(如果第一次,这个过程很慢,请耐心等待)



生成出来的文件会在

.../target/releases/elasticsearch-analysis-ik-5.3.0.zip


我们需要解压
elasticsearch-analysis-ik-5.3.0.zip
这个文件,然后把解压之后的内容全部拷贝到elasticsearch的安装目录的
plugins/ik
中(自己创建个ik目录)



最后 重启你的elasticsearch实例。

(注意,我们前面已经做了elasticsearch集群,我这里有2个es节点,都需要拷贝这个插件)

查看你的插件

重新启动2个ES实例之后,再启动我们的”Kibana”这个工具:

kibana-5.3.0-linux-x86_64/bin/kibana


使用ES的api查看插件:



测试一下分词

1、我们先准备几条新闻数据

POST blog/news/901
{
"title":"前端开发框架vue.js开发实践总结",
"content":"如果你之前有用过angular.js或别的双向绑定的js库,那么你会有一种自来熟的感觉。当然,vue作为一个轻量的前端视图层工具,与angular相比,还是有很明显的区别的",
"tags":"vue js angulars 前端 工具"
}
POST blog/news/902
{
"title":"React.js初学者应该知道的9件事",
"content":"我们从最基本的开始。React不是一个 MVC框架,好吧,它根本就不是一个框架。它只是一个渲染视图的库。如果你对 MVC 熟悉的话,你就会意识到 React.js只对应了V这部分,如果它插手了M或C的逻辑,你就需要考虑用其它方法来解了",
"tags":"mvc 框架 react 逻辑"
}
POST blog/news/903
{
"title":"大风厂\"一一六事件\"的总结报告",
"content":"郑西坡得知护厂工人强烈抗议拆迁,山水集团就找来警察来维持秩序,陈岩石觉得是经济纠纷,怎么可以派警察,他赶忙给京州市警察局长赵东来打电话,赵东来长根本不知情,并且肯定说是假警察",
"tags":"大风厂 总结报告 达康书记"
}
POST blog/news/904
{
"title":"总的来说,大风厂事件的处理结果还是让领导满意的",
"content":"侯亮平调查的好,领导很满意。此处省略一万字。",
"tags":"大风厂 领导 侯亮平"
}


我们现在就有了这些数据了:



2、测试

是不是我们安装好中文分词器就可以马上起到作用了呢?



并没有什么卵用,把“技术总结”这个词分成了这样,,,,

因为在加入分词器之后,需要对字段分别设置(哪些字段需要中文分词)

修改mapping

mapping
可以对索引字段进行类型描述一集搜索分析行为

#针对索引
GET blog/_mapping




#针对索引和类型
GET blog/news/_mapping




我们这里需要对mapping进行修改,但是很不幸的是,我们一开始就把索引建好了,数据也创建了。mapping都已经生成啦。

mapping的anlayzer设置文档:

https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analyzer.html

我们试着创建一下mapping吧:

PUT /blog
{
"mappings": {
"news": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}




这个时候我们想到了备份恢复数据的方法

1、创建一个备份

PUT _snapshot/mybackup/bak2?wait_for_completion=true
{
"indices": "blog"
}




2、删除索引

DELETE blog


3、然后创建索引加上mapping

PUT /blog
{
"mappings": {
"news": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}




这个时候我们来看一下:



4、恢复备份的数据

我们那么多新闻数据不能不要了啊

#先要关闭索引啦
POST blog/_close


##恢复备份的数据
POST _snapshot/mybackup/bak2/_restore?wait_for_completion=true
{
"indices": "blog"
}


#打开索引
POST blog/_open


5、恢复数据之后我们再来测试



什么?没有任何效果。这是因为我们之前的备份也会备份mapping信息,恢复数据的同时mapping信息也还原啦。由此我们得出,不能这么玩。

elasticdump数据导出导入

我们需要导出纯数据(不要mapping信息)

https://github.com/taskrabbit/elasticsearch-dump

使用这个工具,需要node.js.

1、安装node.js

#下载
wget https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-x64.tar.xz --no-check-certificate
#解压
xz -d node-v6.10.2-linux-x64.tar.xz
tar xvf node-v6.10.2-linux-x64.tar


把解压之后的文件夹拷贝的你目录(可以重命名)

2、依然要修改环境配置

vi ~/.bash_profile




保存之后,执行命令(为了立即生效):

source ~/.bash_profile


我们查看一下node.js是否安装成功?

[admin@localhost bin]$ node --version
v6.10.2
[admin@localhost bin]$ npm --version
3.10.10
[admin@localhost bin]$


可以下载elasticdump

为了避免全局安装

我们创建一个目录
estools
,然后我们安装到这个目录中。

cd estools/
npm install elasticdump


使用elasticdump

cd estools/node_modules/.bin/


导出data:

./elasticdump \
--input=http://localhost:9200/blog \
--output=blog.json \
--type=data




然后我们接着来:

#删除索引
DELETE blog


#创建
PUT blog
{
"mappings": {
"news": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}


接下来,我们把
blog.json
导入索引里面:

./elasticdump \
--input=blog.json \
--output=http://localhost:9200/blog \
--type=data




最后我们再来测试一下分词的情况:

POST blog/_analyze
{
"field": "title",
"text": "java开发技术实战"
}


ok,我们发现中文分词成功

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐