安装 elasticsearch-analysis-ik 中文分词器

avatar 2019年02月05日20:16:31 5 3008 views
博主分享免费Java教学视频,B站账号:Java刘哥
ElasticSearch 默认的分词器对英文处理比较好,对中文的话,会将中文分成一个个字。 比如根据文章标题搜索,输入关键字"新中国万岁",会将这五字一个个展开,然后搜索标题中包含这几个字的,这会导致索引引擎的效果不明显。因为我们往往更希望,搜到“新中国”的排在前面,“万岁”的排在前面。而不是“新”排在前面。  

一、分词器对比

我们通过 PostMan 发送请求 1.默认的分词器 POST http://127.0.0.1:9200/_analyze?pretty=true
  1. {
  2.     "text":"新中国万岁"
  3. }
采用默认的分析器 standard 结果如下
  1. {
  2.     "tokens": [
  3.         {
  4.             "token""新",
  5.             "start_offset"0,
  6.             "end_offset"1,
  7.             "type""<IDEOGRAPHIC>",
  8.             "position"0
  9.         },
  10.         {
  11.             "token""中",
  12.             "start_offset"1,
  13.             "end_offset"2,
  14.             "type""<IDEOGRAPHIC>",
  15.             "position"1
  16.         },
  17.         {
  18.             "token""国",
  19.             "start_offset"2,
  20.             "end_offset"3,
  21.             "type""<IDEOGRAPHIC>",
  22.             "position"2
  23.         },
  24.         {
  25.             "token""万",
  26.             "start_offset"3,
  27.             "end_offset"4,
  28.             "type""<IDEOGRAPHIC>",
  29.             "position"3
  30.         },
  31.         {
  32.             "token""岁",
  33.             "start_offset"4,
  34.             "end_offset"5,
  35.             "type""<IDEOGRAPHIC>",
  36.             "position"4
  37.         }
  38.     ]
  39. }
  2.中文分词器 POST http://127.0.0.1:9200/_analyze?pretty=true
  1. {
  2.     "analyzer""ik_max_word",
  3.     "text":"新中国万岁"
  4. }
采用中文分词器 结果如下
  1. {
  2.     "tokens": [
  3.         {
  4.             "token""新中国",
  5.             "start_offset"0,
  6.             "end_offset"3,
  7.             "type""CN_WORD",
  8.             "position"0
  9.         },
  10.         {
  11.             "token""中国",
  12.             "start_offset"1,
  13.             "end_offset"3,
  14.             "type""CN_WORD",
  15.             "position"1
  16.         },
  17.         {
  18.             "token""万岁",
  19.             "start_offset"3,
  20.             "end_offset"5,
  21.             "type""CN_WORD",
  22.             "position"2
  23.         },
  24.         {
  25.             "token""万",
  26.             "start_offset"3,
  27.             "end_offset"4,
  28.             "type""TYPE_CNUM",
  29.             "position"3
  30.         },
  31.         {
  32.             "token""岁",
  33.             "start_offset"4,
  34.             "end_offset"5,
  35.             "type""COUNT",
  36.             "position"4
  37.         }
  38.     ]
  39. }
可见效果提高了不少。  

二、安装中文分词器

我们的 ES 是6.5.0 版本的,对应下载分词器必须也是 6.5.0 版本 1.下载源码包 GitHub 地址:https://github.com/medcl/elasticsearch-analysis-ik 直接下载到本地   2.进入该目录 mvn clean package 打包完毕 在 target/releases 下有一个 elasticsearch-analysis-ik-6.5.0.zip 文件,将其复制,拷贝到 ES 目录下的 plugins 中   3.解压 elasticsearch-analysis-ik-6.5.0.zip,将其重命名为 ik 如图    

三、重启 ES,创建索引

重启 ElasticSearch 在终端输入 jps 可以查看 java 项目的pid,杀死 elasticsearch 的进程 启动 elasticsearch: bin/elasticsearch -d   创建带中文分词器的索引 PUT 127.0.0.1:9200/blog
  1. {
  2.     "settings": {
  3.          "analysis" : {
  4.             "analyzer" : {
  5.                 "ik" : {
  6.                     "tokenizer" : "ik_max_word"
  7.                 }
  8.             }
  9.         },
  10.         "number_of_shards"5,
  11.         "number_of_replicas"1
  12.     },
  13.     "mappings": {
  14.         "post": {
  15.             "properties": {
  16.                 "postId": {
  17.                     "type""long"
  18.                 },
  19.                 "userId": {
  20.                     "type""long"
  21.                 },
  22.                 "postTitle": {
  23.                     "type""text",
  24.                     "analyzer""ik_max_word"
  25.                 },
  26.                 "postSummary": {
  27.                     "type""text",
  28.                     "analyzer""ik_max_word"
  29.                 },
  30.                 "postThumbnail": {
  31.                     "type""keyword"
  32.                 },
  33.                 "postType": {
  34.                     "type""keyword"
  35.                 },
  36.                 "postStatus": {
  37.                     "type""integer"
  38.                 },
  39.                 "postViews": {
  40.                     "type""long"
  41.                 },
  42.                 "postLikes": {
  43.                     "type""long"
  44.                 },
  45.                 "commentSize": {
  46.                     "type""long"
  47.                 },
  48.                 "postDate": {
  49.                     "type""date"
  50.                 }
  51.             }
  52.         }
  53.     }
  54. }
   
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0