当前位置: 首页 > news >正文

在ElasticSearch中使用 IK 中文分词插件

我这里集成好了一个自带IK的版本,下载即用,

https://github.com/xlb378917466/elasticsearch5.2.include_IK

 添加了IK插件意味着你可以使用ik_smart(最粗粒度的拆分)ik_max_word(最细粒度的拆分)两种analyzer

 你也可以从下面这个地址获取最新的IK源码,自己集成,

https://github.com/medcl/elasticsearch-analysis-ik,

里面还提供了使用说明,可以很快上手。

一般使用elasticsearch-head测试比较方便。

这个IK分词插件挺好用的,支持自定义分词,更重要的是支持热更新。

比如上面这个应用程序层是被分成了两个词,如果你把应用程序层作为一个词添加到你的自定义词典中,那么结果就会发生微妙的变化,通过这样不断的完善词库,相信搜索的体验会越来越好。

现在IK分词插件也算集成好了,如何使用?

首先新建一个索引,并且给这个索引下的文档类型设置Mapping关系

这里还是继续使用昨天新建的索引twitter作例子,所以只需要给文档类型tweet 新建一个字段Content,并设置这一个字段的Mapping来举例:

http://localhost:9200/twitter/_mapping/tweet/

{
  "properties": {
    "content": {
      "type": "text",
      "store": "no",
      "term_vector": "with_positions_offsets",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart",
      "include_in_all": "true",
      "boost": 8
    }
  }
}

 这样一来,后面添加的Content就会使用ik_smart来分词,

添加一条测试数据:

http://localhost:9200/twitter/tweet/1/  选择Put  Method

{
  "content": "应用程序层是一个附加层"
}

 查询测试:

http://localhost:9200/twitter/_search/

使用POST Method,因为我使用ElasticSearch Head 在Get的情况下不返回highlight信息

{
  "query" : { "match" : { "content" : "应用程序层是一个附加层" }},
  "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}

 返回如下:

 

使用应用程序关键词是搜不到内容的,因为分词器不识别 这个词,就是说你要用被你拆分之后的词来搜索,才有匹配的记录。

 

比如下面几个就是被拆分出来的词

 

 

转载于:https://www.cnblogs.com/LittleFeiHu/p/6664575.html

相关文章:

  • Ubuntu 16.04 中安装谷歌 Chrome 浏览器
  • SSH使用密钥免密码登录
  • Ajax和跨域问题
  • 使用HTML5的canvas做图片剪裁
  • java异常处理(Exception handing)机制
  • 四则运算 web 版
  • 201521123030 《Java程序设计》第7周学习总结
  • Ajax异步封装
  • 闭包与循环
  • iOS 字符串 MD5
  • 查看linux源代码的在线网站
  • Android入门:MVC模式(中)
  • Oracle中INSTR函数与SQL Server中CHARINDEX函数
  • 沟通和编程一样,也是一门艺术系列5(沟通的方向)
  • CSS实现Tab布局
  • 分享一款快速APP功能测试工具
  • [NodeJS] 关于Buffer
  • 【React系列】如何构建React应用程序
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES10 特性的完整指南
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • extract-text-webpack-plugin用法
  • Git学习与使用心得(1)—— 初始化
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java精华积累:初学者都应该搞懂的问题
  • jdbc就是这么简单
  • JS基础之数据类型、对象、原型、原型链、继承
  • js算法-归并排序(merge_sort)
  • LintCode 31. partitionArray 数组划分
  • mysql外键的使用
  • Redis字符串类型内部编码剖析
  • web标准化(下)
  • 驱动程序原理
  • 如何编写一个可升级的智能合约
  • 深度解析利用ES6进行Promise封装总结
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微服务框架lagom
  • 想写好前端,先练好内功
  • 学习JavaScript数据结构与算法 — 树
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • - 转 Ext2.0 form使用实例
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ​人工智能书单(数学基础篇)
  • #100天计划# 2013年9月29日
  • #pragma multi_compile #pragma shader_feature
  • (13):Silverlight 2 数据与通信之WebRequest
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Java数据结构)ArrayList
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)软件测试分工
  • (十一)图像的罗伯特梯度锐化