一、ElasticSearch-IK分词的安装:

一、IK分词的安装:

原网址:https://www.cnblogs.com/NextNight/p/6837407.html

1、下载IK分词器:https://github.com/medcl/elasticsearch-analysis-ik/releases 我这里下载的是5.3.2的已经编译的版本,因为这里没有5.3.1的版本。

2、在Elasticsearch的plugins目录下新建目录analysis-ik: mkdir analysis-ik

3、将IK分词器的压缩包解压到analysis-ik目录下:

[rzxes@rzxes analysis-ik]$ unzip elasticsearch-analysis-ik-5.3.2.zip 查看目录结构如下:

4、编辑plugin-sescriptor.properties:

修改一些配置,主要是修改elasticsearch.version,因为下载的是5.3.2的而我本身是5.3.1的elasticsearch所以这里修改对应即可。

5、启动Elasticsearch测试IK分词:[rzxes@rzxes elasticsearch-5.3.1]$ bin/elasticsearch

如下图可以看到loaded plugin [analysis-ik],说明已经加载了插件

IK分词支持两种分析器Analyzer: ik_smart , ik_max_word , 两种分词器Tokenizer: ik_smart , ik_max_word,

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

试验一下能否进行分词:调用Elasticsearch的分词器API

standard分词器【analyzer=standard】http://192.168.230.150:9200/_analyze?analyzer=standard&pretty=true&text=hello word西红柿 结果如下:

{

  "tokens" : [

    {

      "token" : "hello",

      "start_offset" : 0,

      "end_offset" : 5,

      "type" : "",

      "position" : 0

    },

    {

      "token" : "word",

      "start_offset" : 6,

      "end_offset" : 10,

      "type" : "",

      "position" : 1

    },

    {

      "token" : "西",

      "start_offset" : 10,

      "end_offset" : 11,

      "type" : "",

      "position" : 2

    },

    {

      "token" : "红",

      "start_offset" : 11,

      "end_offset" : 12,

      "type" : "",

      "position" : 3

    },

    {

      "token" : "柿",

      "start_offset" : 12,

      "end_offset" : 13,

      "type" : "",

      "position" : 4

    }

  ]

}

采用IK分词器【analyzer=ik_smart】http://192.168.230.150:9200/_analyze?analyzer=ik_smart&pretty=true&text=hello word西红柿 结果如下:

{

  "tokens" : [

    {

      "token" : "hello",

      "start_offset" : 0,

      "end_offset" : 5,

      "type" : "ENGLISH",

      "position" : 0

    },

    {

      "token" : "word",

      "start_offset" : 6,

      "end_offset" : 10,

      "type" : "ENGLISH",

      "position" : 1

    },

    {

      "token" : "西红柿",

      "start_offset" : 10,

      "end_offset" : 13,

      "type" : "CN_WORD",

      "position" : 2

    },

    {

      "token" : "9f",

      "start_offset" : 13,

      "end_offset" : 15,

      "type" : "LETTER",

      "position" : 3

    }

  ]

}

采用IK分词器【analyzer=ik_max_word】http://192.168.230.150:9200/_analyze?analyzer=ik_max_word&pretty=true&text=hello word中华人民

{

  "tokens" : [

    {

      "token" : "hello",

      "start_offset" : 0,

      "end_offset" : 5,

      "type" : "ENGLISH",

      "position" : 0

    },

    {

      "token" : "word",

      "start_offset" : 6,

      "end_offset" : 10,

      "type" : "ENGLISH",

      "position" : 1

    },

    {

      "token" : "中华人民",

      "start_offset" : 10,

      "end_offset" : 14,

      "type" : "CN_WORD",

      "position" : 2

    },

    {

      "token" : "中华",

      "start_offset" : 10,

      "end_offset" : 12,

      "type" : "CN_WORD",

      "position" : 3

    },

    {

      "token" : "华人",

      "start_offset" : 11,

      "end_offset" : 13,

      "type" : "CN_WORD",

      "position" : 4

    },

    {

      "token" : "人民",

      "start_offset" : 12,

      "end_offset" : 14,

      "type" : "CN_WORD",

      "position" : 5

    }

  ]

}

致此IK分词就安装成功了,非常简单只需要下载编译包解压就可以了,至于修改配置是对于版本不对应的情况。

二、配置同义词对应:

配置同义词是为了能够检索一个词的时候相关词也能够检索到。关联词和同义词可以合二为一配置在这个文件里。

新建同义词文件:在Elasticsearch的confg目录下新建文件夹analysis并在其下创建文件synonyms.txt,这一步可以直接在conf目录下创建synonyms.txt并不影响,只需要在后面建立缩印的时候指定路径就行。 mkdir analysis vim synonyms.txt

向文件synonyms.txt添加如下内容: 注意‘"逗号"一定是英文的

西红柿,番茄 =>西红柿,番茄

社保,公积金 =>社保,公积金

启动Elasticsearch,此时同义词就会被加载进来。

三、测试同义词是否生效:

创建index:自定义分词器和过滤器并引用IK分词器。

curl -XPUT 'http://192.168.230.150:9200/index' -d'

{

  "index": {

    "analysis": {

      "analyzer": {

        "by_smart": {

          "type": "custom",

          "tokenizer": "ik_smart",

          "filter": ["by_tfr","by_sfr"],

          "char_filter": ["by_cfr"]

        },

        "by_max_word": {

          "type": "custom",

          "tokenizer": "ik_max_word",

          "filter": ["by_tfr","by_sfr"],

          "char_filter": ["by_cfr"]

        }

      },

      "filter": {

        "by_tfr": {

          "type": "stop",

          "stopwords": [" "]

        },

        "by_sfr": {

          "type": "synonym",

          "synonyms_path": "analysis/synonyms.txt"

        }

      },

      "char_filter": {

        "by_cfr": {

          "type": "mapping",

          "mappings": ["| => |"]

        }

      }

    }

  }

}'

创建mapping:定义一个字段title,并且设置分词器analyzer和查询分词器search_analyzer.

curl -XPUT 'http://192.168.230.150:9200/index/_mapping/typename' -d'

{

  "properties": {

    "title": {

      "type": "text",

      "index": "analyzed",

      "analyzer": "by_max_word",

      "search_analyzer": "by_smart"

    }

  }

}'

使用自定义分词器分词: curl -XGET 'http://192.168.230.150:9200/index/_analyze?pretty=true&analyzer=by_smart' -d '{"text":"番茄"}' 结果如下:分词西红柿会通过同义词创建相关索引。

添加数据:

curl -XPOST http://192.168.230.150:9200/index/title/1 -d'{"title":"我有一个西红柿"}'

curl -XPOST http://192.168.230.150:9200/index/title/2 -d'{"title":"番茄炒蛋饭"}'

curl -XPOST http://192.168.230.150:9200/index/title/3 -d'{"title":"西红柿鸡蛋面"}'

检索数据:我们从index索引中检索关键字"番茄"并用标签标记命中的关键字。

curl -XPOST http://192.168.230.150:9200/index/title/_search -d'

{

    "query" : { "match" : { "title" : "番茄" }},

    "highlight" : {

        "pre_tags" : ["", ""],

        "post_tags" : ["", ""],

        "fields" : {

            "title" : {}

        }

    }

}

结果如下:命中了三条数据,命中了"番茄"和他的同义词"西红柿".

致此,IK分词以及同义词的配置就完成了,。

你可能感兴趣的:(一、ElasticSearch-IK分词的安装:)