之前我们讲了logstash的配置:增量配置、全量配置、多输入输出配置等,今天我们讲解一下logstash的俩个重要的组件:ik分词器与ik拼音分词器。
为什么要有要装ik分词器是因为在一定意义上满足不了当前所需的业务。
ik分词器-举个栗子:
在未用ik分词器之前,我们搜索 中人共国 会将中人共国 拆分为 中人共国 去进行搜索,当我们搜索的内容里存在中华 或者 人民这样的包含这俩个词组的内容时 就不会去做任何展示 因为并未存在 中华人民 这样 一整个词组的内容,当我们安装了ik分词器后,神器的效果出现了,当我们搜索中人共国 时 你会发现 包含 中人共国 ,中华人民,中华,华人,人共*国 ,人民,人,民,共和国,共和,和,国国,国歌 的内容 都出来了,这里就是ik分词器的作用了。
拼音分词器-举个栗子:
在未使用拼音分词器之前,当我们想搜索一个搜索我们不知道汉字怎么写时的内容时:比如 <貔貅> 这是我们不会写貔貅这俩个字 我们则可以用 pixiu 或者 px来代替,当输入 pixiu 或 px 时 包含 貔貅的中文内容也就同时出来了。
首先如何安装:
将:
elasticsearch-analysis-ik-5.3.2.zip -- A
elasticsearch-analysis-pinyin-5.4.0.zip -- B
Copy到es的plugins文件夹内执行解压,解压到自己新建的俩个不同的文件夹中.
ik--A
pinyin--B
------------ ik的目录 ---------------------
ik|
-commons-codec-1.9.jar
-commons-logging-1.2.jar
-elasticsearch-analysis-ik-5.3.2.jar
-httpclient-4.5.2.jar
-httpcore-4.4.4.jar
-plugin-descriptor.properties
-config|
--IKAnalyzer.cfg.xml
--...
--custom|
---...
---------- 拼音的目录 ----------------
pinyin|
-elasticsearch-analysis-pinyin-5.4.0.jar
-nlp-lang-1.7.jar
-plugin-descriptor.properties
---...
启动elasticsearch控制台打印出
loaded plugin [analysis-ik]
loaded plugin [analysis-pinyin]
就表示 ik 插件与 pinyin插件安装成功了
------------------ 解释 ------------
IK分词支持
两种分析器:Analyzer: ik_smart , ik_max_word ,
两种分词器:Tokenizer: ik_smart , ik_max_word,
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合。
ik_smart:会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
Pinyin分词支持俩种分析器:
pinyin,就是普通的把汉字转换成拼音;
pinyin_first_letter,提取汉字的拼音首字母
那么插件是安装好了,如何给我们自己的索引建立ik分词 和pinyin分词呢,接下来附上代码:
首先我们创建索引:
PUT acai_pr_sku --你自己的索引名
{
"index": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": { --含拼音与ik都有的分词
"type": "custom",
"tokenizer": "ik_max_word", -- ik分词器
"filter": [
"my_pinyin",
"word_delimiter"
]
}
},
"filter": {
"my_pinyin": {
"type": "pinyin",
"first_letter": "prefix",
"padding_char": " "
}
}
}
}
}
然后给指定的字段增加属性 (拼音分词)
POST acai_pr_sku/acai_pr_sku_table/_mapping --自己创建的索引/自己创建的文档/配置
{
"acai_pr_sku_table": { -- 自己创建的文档
"properties": {
"pinyinkeyword": { -- 所要拼音分词的字段
"type": "keyword",
"fields": {
"pinyin": {
"type": "text",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_pinyin_analyzer", --将我们的配置项 引入
"boost": 10
}
}
}
}
}
}
然后给指定字段增加属性(分词)
POST acai_pr_sku/acai_pr_sku_table/_mapping --自己创建的索引/自己创建的文档/配置
{
"properties": {
"keyword": { --要分词的字段
"type": "text",
"analyzer": "ik_max_word", --ik分析器
"search_analyzer": "ik_max_word" --ik分词器
}
}
}
到此处你所创建的索引里 keyword 这个字段具备了分词功能 pinyinkeyword具备了拼音分词功能
这里的 keyword pinyinkeyword 都是数据库里同步过来的字段。
我们这里的 keyword pinyinkeyword 是封装出来的字段 因业务不方便透露 但是这俩个字段里 一定是 你要搜索的关键字 或者 关键内容等。