1:默认的分析器-- standard

使用默认的分词器

curl -XGET 'http://hadoop01:9200/_analyze?pretty&analyzer=standard' -d '我爱中国'
curl -XGET 'http://hadoop01:9200/_analyze?pretty&analyzer=simple' -d '我爱中国'

这就是默认的分词器,但是默认的分析器有时候在生产环境会出现问题,比如:

curl -XPUT 'http://hadoop01:9200/test/class/1' -d '{"title" : "我爱中国"}'

去hadoop01:9100查看当前索引数据:

然后使用命令查询:

curl -XGET 'hadoop01:9200/test/class/_search?pretty' -d '
{ "query": { "term": {"title": "我爱中国"}}}'

结果:

发现没有找到数据!

这说明分词器出了问题!然后我们可以通过分析器提供的接口去做查询,查看一下当前的分词器是如何进行分词的:

curl -XGET 'hadoop01:9200/test/_analyze?field=title?pretty' -d '我爱中国'

通过图片我们可以看到,我们的数据经过分词器后,会将数据切割成---我、爱、中、国;如果单独去查询每一个字段,都是可以查询到的:

整体查询确查询不到;这就是默认的分词器存在的弊端

2:IK分词器

2.1:安装

1):下载

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.2/elasticsearch-analysis-ik-5.5.2.zip

2):下载好了之后解压,将解压后的文件夹放在elasticsearch目录下的plugins目录下,并重命名为analysis-ik【发送到所有机器(本课程提供安装包)】

3):重启elasticsearch

ik带有两个分词器:

•   ik_max_word :会将文本做最细粒度的拆分;尽可能多的拆分出词语
• ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有

2.2:使用IK分词

1):构建索引,指定IK分词器

curl -XPUT 'http://hadoop01:9200/iktest?pretty' -d '{
   "settings" : {
       "analysis" : {
           "analyzer" : {
               "ik" : {
                   "tokenizer" : "ik_max_word"
              }
          }
      }
  },
   "mappings" : {
       "article" : {
           "dynamic" : true,
           "properties" : {
               "subject" : {
                   "type" : "string",
                   "analyzer" : "ik_max_word"
              }
          }
      }
  }
}'

2):插入数据

curl -XPOST http://hadoop01:9200/iktest/article/_bulk?pretty -d '
{ "index" : { "_id" : "1" } }
{"subject" : ""闺蜜"崔顺实被韩检方传唤 韩总统府促彻查真相" }
{ "index" : { "_id" : "2" } }
{"subject" : "韩举行"护国训练" 青瓦台:决不许国家安全出问题" }
{ "index" : { "_id" : "3" } }
{"subject" : "媒体称FBI已经取得搜查令 检视希拉里电邮" }
{ "index" : { "_id" : "4" } }
{"subject" : "村上春树获安徒生奖 演讲中谈及欧洲排外问题" }
{ "index" : { "_id" : "5" } }
{"subject" : "希拉里团队炮轰FBI 参院民主党领袖批其”违法”" }
'

3):查询测试

curl -XPOST http://hadoop01:9200/iktest/article/_search?pretty  -d'
{
   "query" : { "match" : { "subject" : "希拉里和韩国" }},
   "highlight" : {
       "pre_tags" : ["<font color='red'>"],
       "post_tags" : ["</font>"],
       "fields" : {
           "subject" : {}
      }
  }
}
'

2.3:热词更新

现在网络热词很多,每隔一段时间就会出现网红热词;但是如果直接使用IK分词,是识别不了这些词的;

curl -XGET 'http://hadoop01:9200/_analyze?pretty&analyzer=ik_max_word' -d '
王者荣耀'

返回结果:

IK并没有识别出网红的词汇;ik 的主词典中没有【老铁、没毛病】词,所以被拆分了

修改 IK 的配置文件 :ES 目录/export/servers/elasticsearch-5.5.2/plugins/analysis-ik/config/IKAnalyzer.cfg.xml

修改配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom/my.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 -->
<entry key="remote_ext_dict">192.168.0.1/stopworld.di</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

在custom/my.dic中添加:老铁、没毛病

然后重启es;在次执行:

curl -XGET 'http://hadoop01:9200/_analyze?pretty&analyzer=ik_max_word' -d '老铁没毛病,双击666'

但是,上面的操作是需要进行重启的,上面的步骤只是更新词库,并不是所谓的热更新;所谓的热更新词库,是要在不重启es的前提下完成的;

es之IK分词器的更多相关文章

  1. Restful认识和 IK分词器的使用

    什么是Restful风格 Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作. 使用Restful的好处: 透 ...

  2. Elasticsearch学习系列一(部署和配置IK分词器)

    Elasticsearch简介 Elasticsearch是什么? Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储.检索数据.本身扩展性很好,可扩展 ...

  3. ES系列一、CentOS7安装ES 6.3.1、集成IK分词器

    Elasticsearch 6.3.1 地址: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3. ...

  4. 安装ik分词器以及版本和ES版本的兼容性

    一.查看自己ES的版本号与之对应的IK分词器版本 https://github.com/medcl/elasticsearch-analysis-ik/blob/master/README.md 二. ...

  5. ES ik分词器使用技巧

    match查询会将查询词分词,然后对分词的结果进行term查询. 然后默认是将每个分词term查询之后的结果求交集,所以只要分词的结果能够命中,某条数据就可以被查询出来,而分词是在新建索引时指定的,只 ...

  6. Elasticsearch5.1.1+ik分词器+HEAD插件安装小记

    一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-an ...

  7. elasticsearch 之IK分词器安装

    IK分词器地址:https://github.com/medcl/elasticsearch-analysis-ik 安装好ES之后就可以安装分词器插件了 记住选择ES对应的版本 对应的有版本选择下载 ...

  8. 如何开发自己的搜索帝国之安装ik分词器

     Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词,我是中国人 不能简单的分成一个个字,我们更希望 “中国人”,“中国”,“我”这样的分词,这样我们就需要 ...

  9. elasticsearch安装ik分词器

    一.概要: 1.es默认的分词器对中文支持不好,会分割成一个个的汉字.ik分词器对中文的支持要好一些,主要由两种模式:ik_smart和ik_max_word 2.环境 操作系统:centos es版 ...

随机推荐

  1. 11g Oracle Rac安装(基于linux6)

    安装 Oracle 11gR2 RAC on Linux 6 本文介绍如何在Oracle Linux 6上安装2节点Oracle 11gR2 Real Application Cluster(RAC) ...

  2. [Web 前端] 021 js 初识 Javascript

    1. Javascript 简介 1.1 定位 JS 是运行在浏览器端的脚本语言 1.1.1 关于浏览器 JS 由浏览器解释执行 JS 通常被直接嵌入 HTML 页面 1.1.2 关于脚本语言 JS ...

  3. uboot启动第一阶段分析

    一. uboot第一阶段初识 1.1. 什么是uboot第一阶段 1.1.1. 启动os三个阶段 1.1.1.1. bl0阶段 a. 这段代码是三星固化到iROM中,可以查看<S5PV210_i ...

  4. ECMAScript(ES) 6 之 let 与 const

    ES6 新增加了两个重要的 JavaScript 关键字 :let  和 const 先说一下 const :它用于声明一个只读的常量,一旦声明,常量的值就不能改变. const servicePat ...

  5. AVCaptureSession拍照,摄像,载图总结

    AVCaptureSession [IOS开发]拍照,摄像,载图总结 1 建立Session  2 添加 input  3 添加output  4 开始捕捉 5 为用户显示当前录制状态 6 捕捉 7 ...

  6. php 操作分表代码

    //哈希分表 function get_hash_table($table, $userid) { $str = crc32($userid); if ($str < 0) { $hash = ...

  7. 用R语言提取数据框中日期对应年份(列表转矩阵)

    用R语言提取数据框中日期对应年份(列表转矩阵) 在数据处理中常会遇到要对数据框中的时间做聚类处理,如从"%m/%d/%Y"中提取年份. 对应操作为:拆分成列表——列表转矩阵——利用 ...

  8. python中字典的美化输出

    一.背景 如果一个字典长度很大,直接print输出则比较难看,我们需要美化输出,可以借鉴json import json beautiful_format = json.dumps(your_dict ...

  9. odoo ERP 系统安装与使用

    https://hub.docker.com/_/odoo/ #!/bin/bash sudo docker pull postgres:10sudo docker pull odoo:11.0 su ...

  10. 07java进阶——集合框架3(Map)

    1.映射表(Map) 1.1基本概念 1.2Map中常用的方法 package cn.jxufe.java.chapter7; import java.util.HashMap; import jav ...