Elasticsearch 分词插件的使用

IK:

1 下载ik源代码  https://github.com/medcl/elasticsearch-analysis-ik

2 解压源代码包

3 在源代码目录 执行 mvn clean  清理

4 mvn compile 编译,产生一个target文件夹存储生成linux可识别的应用程序源文件(类似于vs生成bin下的文件),

5 mvn package 执行打包命令,产生可执行的jar包

6 找到target/release目录

7 复制并解压elasticsearch-analysis-ik-1.9.3.zip 到 es的plugins/ik目录

例如:unzip /es/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.9.3.zip  -d  /es/elasticsearch-2.3.3/plugins/ik 

8  elasticsearch.yml 末尾加上

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

9 设置默认分词器为ik

index.analysis.analyzer.default.type:ik

 

9 指定映射时:

{
"settings" : {
        "analysis" : {
            "analyzer" : {
                "ik" : {
                    "tokenizer" : "ik"
                }
            }
        }
    },
    "mappings": {
        "logweb": {
            "properties": {
                "firstname": {
                    "type":   "string",
                    "index":  "analyzed",
                    "analyzer" : "ik"
                },"lastname": {
                    "type":   "string",
                    "index":  "analyzed"
                },"gender": {
                    "type":   "boolean",
                    "index":  "not_analyzed"
                },"price": {
                    "type":   "float",
                    "index":  "not_analyzed"
                },"createTime": {
                    "type":   "date",
                    "index":  "not_analyzed"
                }
            }
        
        }
    }
}

  

此时执行搜索:

未设置ik分词,默认使用标准分析器的搜索结果:

使用了ik分词的搜索结果:

 分析:

1使用标准分析器是一元分词,会把汉字拆成一个一个的字作为索引的最小存储单元在term里,所以当你执行term查询时,只能搜索单个字才能匹配上数据

2使用了ik分词器以后,他会把“ 意大利 圣碧涛天然矿泉水(含汽) 1.5L” 拆成 意大利/圣/碧/泉/天然/矿泉水/矿/泉水/水/含/汽/1.5l/1.5/l  ,此时你搜所“天然” 是能找到数据的,但是你搜所“天”使找不到数据的。因为“天”并没有拆成一个结果单元。

 

测试分词:

在浏览器中:

http://10.10.110.2:19200/testindex/_analyze?analyzer=ik&text=我爱你中国

使用curl:

curl -XGET http://10.10.110.160:9200/testindex/_analyze?analyzer=ik -d '我爱你中国'

 

http://www.cnblogs.com/huangfox/p/3629286.html

http://www.th7.cn/Program/java/201606/884393.shtml

http://blog.csdn.net/huwei2003/article/details/40591191

http://my.oschina.net/u/579033/blog/394845

 

分词:


es的ik分词设置在:/benlaisearch/elasticsearch-2.3.3/plugins/ik/config目录下的IKAnalyzer.cfg.xml文件:

<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 txt文件是utf-8格式-->
<!-- <entry key="remote_ext_dict">http://192.168.1.15/mydict.txt</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

1) 可以配置在服务器本地的路径里/benlaisearch/elasticsearch-2.3.3/plugins/ik/config/custom,文件夹下有基础词典文件,可以将自己的词语添加进去。词典修改时需要重启es

2)   也可以配置在远程的地方:http://192.168.1.15/mydict.txt  es动态从远程文件上读取自定义词典,文档修改时他会自动加载

 

拼音:

https://github.com/medcl/elasticsearch-analysis-pinyin/tree/v1.7.3

1 下载兼容版本的拼音分词插件:   git clone https://github.com/medcl/elasticsearch-analysis-pinyin.git

2 进入下载文件存放目录执行解压命令:unzip elasticsearch-analysis-pinyin-1.7.3.zip

3 进入解压后产生的文件目录:cd elasticsearch-analysis-pinyin-1.7.3,检查pom.xml文件的<elasticsearch.version>2.3.3</elasticsearch.version>配置的节点是否与es版本一致

4 执行  mvn install  打包命令,产生可执行的jar包

8 找到target/release目录

9 复制并解压elasticsearch-analysis-pinyin-1.7.3.zip压缩包,得到(elasticsearch-analysis-pinyin-1.7.3.jar   pinyin4j-2.5.0.jar  plugin-descriptor.properties)3个文件,复制 到 es的plugins/pinyin目录

10 重启es

测试:http://192.168.60.60:19200/_analyze?analyzer=pinyin&text=我爱你中国

结果:{"tokens":[{"token":"wo ai ni zhong guo","start_offset":0,"end_offset":5,"type":"word","position":0}]}

 测试:

 

 

 一个自定义分析器包含一个分词器和0到多个Token Filters,0到多个Char Filters

关于向量的含义:Field.TermVector Field.TermVector.NO表示不索引Token的位置属性
      Field.TermVector.WITH_OFFSETS表示额外索引Token的结束点
      Field.TermVector.WITH_POSITIONS表示额外索引Token的当前位置
      Field.TermVector.WITH_POSITIONS_OFFSETS表示额外索引Token的当前和结束位置
      Field.TermVector.YES则表示存储向量

 

 

 {"token": "l","start_offset": 0,"end_offset": 3,"type": "word","position": 0},

start_offset 代表分词前,词语的开始位置

end_offset 代表分词前,词语的结束位置

position  代表分词后,被分出来的词元,处于原始词语的位置。

例如 刘德华 这个词,分词有 li  ,li处于第一个原始词的位置 position是0,de处于第二个原始词的位置 所以position是1

 

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

 

 

posted @ 2016-07-12 15:03  二月长安  阅读(1316)  评论(0编辑  收藏  举报