大数据搜索与挖掘及可视化管理方案 :Elastic Stack 5:Elasticsearch、Logstash、Kibana、X-Pack、Beats (第3版)
上QQ阅读APP看书,第一时间看更新

2.6 设置中文分析器

全文检索往往需要对中文进行分词。有关中文分词的背景知识可参考本章“扩展知识与阅读”部分。Lucene提供了分析器用于处理分词,此外也有一些开源的分词处理模块可供方便地集成到信息检索系统中。如果需要为当前的索引文件定义一个新的分析器,需要先关闭当前索引,然后在更改分析器后,再次打开这个索引文件。这里以IK分析器为例,对分析器的配置和使用进行介绍。

首先,在IK分析器的GitHub网站中下载源代码压缩包,单击页面左上方标有“branch:master”字样的下拉列表,选择“tags”标签。选择与当前已安装的Elasticsearch相对应的版本(可以在页面下方的对照表中查看所需下载的IK分析器版本),页面随即跳转至指定版本的源代码页面。此时按下右上方的绿色按钮,下载ZIP压缩包。

Tips:程序源代码除使用Maven编译之外,也可以在http://maven.aliyun.com中找到。

接着,使用终端中的unzip命令将下载好的压缩包解压。在解压后的文件夹中,执行终端命令mvn package生成IK分析器的ZIP压缩包。在Elasticsearch目录下的plugins文件夹中创建ik文件夹,并将生成的ZIP压缩包解压到{es_home}/plugins/ik文件夹中。对Elasticsearch中的索引文件weibo进行更改分析器的配置,如代码段2.19所示。

    //代码段2.19:设置索引分析器
    curl-XPOST'localhost:9200/weibo/_close'            //关闭weibo索引
    curl-XPUT'localhost:9200/weibo/_settings'-d'{      //设置weibo索引
        "analysis": {                                  //更改分析器
            "analyzer": {
              "content": {                             //设置应用分析器的字段
                  "type": "custom",
                  "tokenizer": "ik_max_word"           //采用IK分析器
              }
            }
        }
    }'
    curl-XPOST'localhost:9200/weibo/_open'             //重新打开weibo索引

代码段2.20演示了通过特定分析器对指定文字进行分词并观察分词结果的方法。

    //代码段2.20,使用 IK分析器对指定文字进行分词
    curl-XGET'localhost:9200/_analyze? analyzer=ik_max_word'-d’公安部:各地校车将享
    最高路权’

上述代码执行后的示例返回值如下:

    {
      "tokens": [
        {
          "token": "公安部",           //第 1个词
          "start_offset":0,
          "end_offset":3,
          "type": "CN_WORD",
          "position":0
        },
        {
          "token": "公安",             //第 2个词
          "start_offset":0,
          "end_offset":2,
          "type": "CN_WORD",
          "position":1
        },
        {
          "token": "部",              //第 3个词
          "start_offset":2,
          "end_offset":3,
          "type": "CN_CHAR",
          "position":2
        },
        {
          "token": "各地",             //第 4个词
          "start_offset":4,
          "end_offset":6,
          "type": "CN_WORD",
          "position":3
        },
        {
          "token": "校车",             //第 5个词
          "start_offset":6,
          "end_offset":8,
          "type": "CN_WORD",
          "position":4
        },
        {
          "token": "将",               //第 6个词
          "start_offset":8,
          "end_offset":9,
          "type": "CN_CHAR",
          "position":5
        },
        {
          "token": "享",               //第 7个词
          "start_offset":9,
          "end_offset":10,
          "type": "CN_WORD",
          "position":6
        },
        {
          "token": "最高",             //第 8个词
          "start_offset":10,
          "end_offset":12,
          "type": "CN_WORD",
          "position":7
        },
        {
          "token": "路",              //第 9个词
          "start_offset":12,
          "end_offset":13,
          "type": "CN_CHAR",
          "position":8
        },
        {
          "token": "权",              //第 10个词
          "start_offset":13,
          "end_offset":14,
          "type": "CN_CHAR",
          "position":9
        }
      ]
    }