Elasticsearch中使⽤ik分词器JAVAapi
⼀、Elasticsearch分词
在elasticsearch⾃带的分词器中,对中⽂分词是⽀持的,只是所有的分词都是按照单字进⾏分词的,例如所带的标准的分词器standard分词器,可以按照如下的⽅式查询是如何进⾏分词的
[java]
1. localhost:9200/iktest/_analyze?pretty&analyzer=standard&text=中华⼈民共和国
上述例⼦使⽤的是standard进⾏分词,分词的结果如下:
1. {
2.  "tokens" : [ {
3.    "token" : "中",
4.    "start_offset" : 0,
5.    "end_offset" : 1,
6.    "type" : "<IDEOGRAPHIC>",
7.    "position" : 0
8.  }, {
9.    "token" : "华",
10.    "start_offset" : 1,
11.    "end_offset" : 2,
12.    "type" : "<IDEOGRAPHIC>",
13.    "position" : 1
14.  }, {
15.    "token" : "⼈",
16.    "start_offset" : 2,
17.    "end_offset" : 3,
18.    "type" : "<IDEOGRAPHIC>",
19.    "position" : 2
20.  }, {
21.    "token" : "民",
22.    "start_offset" : 3,
23.    "end_offset" : 4,
24.    "type" : "<IDEOGRAPHIC>",
position和location的区别25.    "position" : 3
26.  }, {
27.    "token" : "共",debug手机版下载
28.    "start_offset" : 4,
29.    "end_offset" : 5,
30.    "type" : "<IDEOGRAPHIC>",
31.    "position" : 4
32.  }, {
33.    "token" : "和",
34.    "start_offset" : 5,
35.    "end_offset" : 6,
36.    "type" : "<IDEOGRAPHIC>",
37.    "position" : 5
38.  }, {
39.    "token" : "国",
40.    "start_offset" : 6,
41.    "end_offset" : 7,
42.    "type" : "<IDEOGRAPHIC>",
43.    "position" : 6
《新神榜:杨戬》什么时候上映44.  } ]
45. }
从结果可以看出,对于⾃带的分词器是对每⼀个字进⾏切分分词的,但是如果按照这样来的话,搜索结果中可能好多就是按照单字进⾏搜索这种的,影响搜索结果,我们希望更智能的分词⽅法,对于es⽐较友好的⼀个分词器就是ik分词器,直接下载就可以进⾏使⽤
⼆、ik分词器的安装
ik分词器是⼀款在使⽤es的时候常⽤的分词器,只要在github上进⾏下载即可,下载地址如下
1. github/medcl/elasticsearch-analysis-ik/releases
要下载⾃⼰所使⽤es所对应的版本
[java]
1. IK version  ES version
2. master  2.1.1 -> master
3.    1.7.0  2.1.1
4.    1.6.1  2.1.0
5.    1.5.0  2.0.0
6.    1.4.1  1.
7.2
7.    1.4.0  1.6.0
8.    1.3.0  1.5.0
9.    1.2.9  1.4.0
10.    1.2.8  1.3.2
11.    1.2.7  1.2.1
12.    1.2.6  1.0.0
13.    1.2.50.90.x
14.    1.1.30.20.x
15.    1.1.20.19.x
16.    1.0.00.16.2 -> 0.19.0
如上所⽰,个⼈认为版本⾼的会对版本低的进⾏兼容
下载完成之后,解压,然后使⽤mvn package进⾏打包,此处需要安装maven,如何安装请⾃⾏百度
打包完成之后,会出现 target/releases/elasticsearch-analysis-ik-{version}.zip
免费的网站模板哪里有
将zip⽂件拷贝到es所在⽬录下的/plugins/ik
对zip⽂件进⾏解压,解压完成之后需要修改plugin-descriptor.properties⽂件,将其中的java版本,以及es版本号均改为你所使⽤的版本号,即完成ik分词器的安装
三、对ik分词器的效果进⾏检测
安装完成时候,使⽤之前的命令进⾏检测,因为ik分词器分为两种分词⽅法,⼀种是最⼤切分,⼀种是全切分,对应的名字为
ik_smart,ik_max_word,其中smart的切分更加符合⽇常的⽤于,max_word的切分会更加的细致,如github上⾯所讲述的,下⾯对于给定的句⼦我们进⾏⼀个检测,句⼦为:中华⼈民共和国
ik_samrt切分结果:
[java]
1. localhost:9200/iktest/_analyze?pretty&analyzer=ik_smart&text=中华⼈民共和国
1. {
2. "tokens" : [ {
3. "token" : "中华⼈民共和国",
4. "start_offset" : 0,
5. "end_offset" : 7,
6. "type" : "CN_WORD",
7. "position" : 0
8.  } ]
9. }
最⼤切分将⼀个中华⼈民共和国直接切分成⼀个完成的词语
ik_max_word切分:
[java]
1. localhost:9200/iktest/_analyze?pretty&analyzer=ik_max_word&text=中华⼈民共和国
[java]
1. {
2. "tokens" : [ {
3. "token" : "中华⼈民共和国",
4. "start_offset" : 0,
android开发源码
5. "end_offset" : 7,
6. "type" : "CN_WORD",
7. "position" : 0
8.  }, {
9. "token" : "中华⼈民",
10. "start_offset" : 0,
11. "end_offset" : 4,
12. "type" : "CN_WORD",
13. "position" : 1
14.  }, {
15. "token" : "中华",
16. "start_offset" : 0,
17. "end_offset" : 2,
18. "type" : "CN_WORD",
19. "position" : 2
20.  }, {
21. "token" : "华⼈",
eclipse中文怎么设置22. "start_offset" : 1,
23. "end_offset" : 3,
24. "type" : "CN_WORD",
25. "position" : 3
26.  }, {
27. "token" : "⼈民共和国",
28. "start_offset" : 2,
29. "end_offset" : 7,
30. "type" : "CN_WORD",
31. "position" : 4
32.  }, {
33. "token" : "⼈民",
34. "start_offset" : 2,
34. "start_offset" : 2,
35. "end_offset" : 4,
36. "type" : "CN_WORD",
37. "position" : 5
38.  }, {
39. "token" : "共和国",
40. "start_offset" : 4,
41. "end_offset" : 7,
42. "type" : "CN_WORD",
43. "position" : 6
44.  }, {
45. "token" : "共和",
46. "start_offset" : 4,
47. "end_offset" : 6,
48. "type" : "CN_WORD",
49. "position" : 7
50.  }, {
51. "token" : "国",
52. "start_offset" : 6,
53. "end_offset" : 7,
54. "type" : "CN_CHAR",
55. "position" : 8
56.  } ]
57. }
以上的结果表⽰ik_max_word的分词会更加的详细
四、关于两种不同分词的⽤处以及区别:
1、使⽤⽅⾯的不同
其中我们在做索引的时候,希望能将所有的句⼦切分的更详细,以便更好的搜索,所以ik_max_word更多的⽤在做索引的时候,但是在搜索的时候,对于⽤户所输⼊的query(查询)词,我们可能更希望得⽐较准确的结果,例如,我们搜索“⽆花果”的时候,更希望是作为⼀个词进⾏查询,⽽不是切分为"⽆",
“花”,“果”三个词进⾏结果的召回,因此ik_smart更加常⽤语对于输⼊词的分析
2、效率⽅⾯的不同
ik_max_word分词相对来说效率更加迅速,⽽ik_smart的效率⽐不上ik_max_word(个⼈做索引的时候将两种分词器进⾏尝试得出的结果,有误的话,望指正)
五、java api实现指定分词器
实际应⽤的时候,我们可能都是在程序⾥⾯来实现指定分词器的,⽽上⾯所讲述的均为直接在⽹页进⾏查看的结果,那么如何指定分词器呢?如何⽤java代码实现呢
经过查,最终发现三种⽅法来指定分词器
(1)在构造mapping的时候对于字段进⾏指定
在构造mapping的时候,我们可以对于指定的字段使⽤指定的分词器,所使⽤的java 代码如下所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。