成语大全网 - 成语词典 - 如何读取elasticsearch的分词索引信息

如何读取elasticsearch的分词索引信息

一、插件准备

网上有介绍说可以直接用plugin -install medcl/elasticsearch-analysis-ik的办法,但是我执行下来的效果只是将插件的源码下载下来,elasticsearch只是将其作为一个_site插件看待。

所以只有执行maven并将打包后的jar文件拷贝到上级目录。(否则在定义mapping的analyzer的时候会提示找不到类的错误)。

由于IK是基于字典的分词,所以还要下载IK的字典文件,在medcl的elasticsearch-RTF中有,可以通过这个地址下载:

/downloads/medcl/elasticsearch-analysis-ik/ik.zip

下载之后解压缩到config目录下。到这里,你可能需要重新启动下elasticsearch,好让下一部定义的分词器能立即生效。

二、分词定义

分词插件准备好之后就可以在elasticsearch里定义(声明)这个分词类型了(自带的几个类型,比如standred则不需要特别定义)。跟其他设置一样,分词的定义也可以在系统级(elasticsearch全局范围),也可以在索引级(只在当前index内部可见)。系统级的定义当然是指在conf目录下的

elasticsearch.yml文件里定义,内容大致如下:

index:

analysis:

analyzer:

ikAnalyzer:

alias: [ik]

type: org.elasticsearch.index.analysis.IkAnalyzerProvider

或者 index.analysis.analyzer.ik.type : "ik"

因为个人喜好,我并没有这么做, 而是定义在了需要使用中文分词的index中,这样定义更灵活,也不会影响其他index。

在定义analyze之前,先关闭index。其实并不需要关闭也可以生效,但是为了数据一致性考虑,还是先执行关闭。(如果是线上的系统需要三思)

curl -XPOST /medcl/elasticsearch-analysis-ik,下载分词器源码,然后进入下载目录,执行命令:mvn clean package,打包生成elasticsearch-analysis-ik-1.2.5.jar。将这个jar拷贝到ES_HOME/plugins/analysis-ik目录下面,如果没有该目录,则先创建该目录。

2、ik目录拷贝

将下载目录中的ik目录拷贝到ES_HOME/config目录下面。

3、分词器配置

打开ES_HOME/config/elasticsearch.yml文件,在文件最后加入如下内容:

index:

analysis:

analyzer:

ik:

alias: [ik_analyzer]

type: org.elasticsearch.index.analysis.IkAnalyzerProvider

ik_max_word:

type: ik

use_smart: false

ik_smart:

type: ik

use_smart: true

index.analysis.analyzer.default.type: ik

ok!插件安装已经完成,请重新启动ES,接下来测试ik分词效果啦!

三、ik分词测试

1、创建一个索引,名为index。

curl -XPUT http://localhost:9200/index

2、为索引index创建mapping。

curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'

{

"fulltext": {

"_all": {

"analyzer": "ik"

},

"properties": {

"content": {

"type" : "string",

"boost" : 8.0,

"term_vector" : "with_positions_offsets",

"analyzer" : "ik",

"include_in_all" : true

}

}

}

}'

3、测试

curl 'http://localhost:9200/index/_analyze?analyzer=ik&pretty=true' -d '

{

"text":"世界如此之大"

}'

显示结果如下:

{

"tokens" : [ {

"token" : "text",

"start_offset" : 4,

"end_offset" : 8,

"type" : "ENGLISH",

"position" : 1

}, {

"token" : "世界",

"start_offset" : 11,

"end_offset" : 13,

"type" : "CN_WORD",

"position" : 2

}, {

"token" : "如此",

"start_offset" : 13,

"end_offset" : 15,

"type" : "CN_WORD",

"position" : 3

}, {

"token" : "之大",

"start_offset" : 15,

"end_offset" : 17,

"type" : "CN_WORD",

"position" : 4

} ]

}