百度ElasticsearchBES

    配置-IK-Analyzer-词库

    配置词库

    当IK 自身带的词库不满足需求时,用户可以自己定义词库,步骤如下:

    • 用户把编辑好的词库放到一个http服务器上。
    • 用户在es里配置ik词库的http地址,比如我们的词的配置文件是baidu.dict,停用词的配置文件是baidu_stop.dic时,我们向es发送的命令如下:

      PUT /_cluster/settings
      {
          "persistent": {
              "bpack.ik_analyzer.remote_ext_dict":"http://ip:port/baidu.dic",
              "bpack.ik_analyzer.remote_ext_stopwords":"http://ip:port/baidu_stop.dic"
          }
      }
    • es会每隔60s检测一下setting中http url指向的词库文件是否发生变化,如果变化了,那么es就会自动下载这个文件,然后加载到ik中。

    验证词库是否生效

    当配置好后,用户可以通过API POST /_analyze 来检测词库是否生效,比如:

    • 在没有配置词库之前,我们发送命令

      POST /_analyze
      {
        "analyzer" : "ik_smart",
        "text" : ["赵小明明真帅"]
      }

    es 的返回结果是:

    	{
    	   "tokens": [
    	      {
    	         "token": "赵",
    	         "start_offset": 0,
    	         "end_offset": 1,
    	         "type": "CN_WORD",
    	         "position": 0
    	      },
    	      {
    	         "token": "小明",
    	         "start_offset": 1,
    	         "end_offset": 3,
    	         "type": "CN_WORD",
    	         "position": 1
    	      },
    	      {
    	         "token": "明",
    	         "start_offset": 3,
    	         "end_offset": 4,
    	         "type": "CN_WORD",
    	         "position": 2
    	      },
    	      {
    	         "token": "真帅",
    	         "start_offset": 4,
    	         "end_offset": 6,
    	         "type": "CN_WORD",
    	         "position": 3
    	      }
    	   ]
    	}
    • 然后我们配置一下词库,其中正常词库里只包含 "赵小明明", 停用词词库中包含 "真帅",配置完之后,我们再次调用 /_analyze api,结果如下:

      {
         "tokens": [
            {
               "token": "赵小明明",
               "start_offset": 0,
               "end_offset": 4,
               "type": "CN_WORD",
               "position": 0
            }
         ]
      }

    结果显示, “赵小明明” 被当做一个单独的词,而 "真帅" 被当做停用词去掉了。

    上一篇
    NLP中文分词插件
    下一篇
    Es-各个版本之间的升级