首页 > 其他分享 >ElasticSearch学习笔记(4)-IK中文分词器

ElasticSearch学习笔记(4)-IK中文分词器

时间:2022-12-18 16:55:51浏览次数:49  
标签:ik 查询 person2 IK ElasticSearch 分词器 offset type

一、分词器-介绍

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包
•是一个基于Maven构建的项目
•具有60万字/秒的高速处理能力
•支持用户词典扩展定义
•下载地址: https://github.com/medcl/elasticsearch-analysis-ik/

 

二、ik分词器使用


IK分词器有两种分词模式:ik_max_word和ik_smart模式。


1、ik_max_word


会将文本做最细粒度的拆分,比如会将“乒乓球明年总冠军”拆分为“乒乓球、乒乓、球、明年、总冠军、
冠军。

 

#方式一ik_max_word
GET /_analyze
{
 "analyzer": "ik_max_word",
 "text": "乒乓球明年总冠军"
}

ik_max_word分词器执行如下

{
 "tokens" : [
 {
   "token" : "乒乓球",
   "start_offset" : 0,
   "end_offset" : 3,
   "type" : "CN_WORD",
   "position" : 0
 },
 {
   "token" : "乒乓",
   "start_offset" : 0,
   "end_offset" : 2,
   "type" : "CN_WORD",
   "position" : 1
 },
 {
   "token" : "球",
   "start_offset" : 2,
   "end_offset" : 3,
   "type" : "CN_CHAR",
   "position" : 2
 },
 {
   "token" : "明年",
   "start_offset" : 3,
   "end_offset" : 5,
   "type" : "CN_WORD",
   "position" : 3
 },
 {
   "token" : "总冠军",
   "start_offset" : 5,
   "end_offset" : 8,
   "type" : "CN_WORD",
   "position" : 4
 },
 {
   "token" : "冠军",
   "start_offset" : 6,
   "end_offset" : 8,
   "type" : "CN_WORD",
   "position" : 5
 }
]
}

 

2、ik_smart


会做最粗粒度的拆分,比如会将“乒乓球明年总冠军”拆分为乒乓球、明年、总冠军。

#方式二ik_smart
GET /_analyze
{
 "analyzer": "ik_smart",
 "text": "乒乓球明年总冠军"
}

ik_smart分词器执行如下:

{
 "tokens" : [
 {
   "token" : "乒乓球",
   "start_offset" : 0,
   "end_offset" : 3,
   "type" : "CN_WORD",
   "position" : 0
 },
 {
   "token" : "明年",
   "start_offset" : 3,
   "end_offset" : 5,
   "type" : "CN_WORD",
   "position" : 1
 },
 {
   "token" : "总冠军",
   "start_offset" : 5,
   "end_offset" : 8,
   "type" : "CN_WORD",
   "position" : 2
 }
]
}

由此可见 使用ik_smart可以将文本"text": "乒乓球明年总冠军"分成了【乒乓球】【明年】【总冠军】
这样看的话,这样的分词效果达到了我们的要求。

 

三、使用IK分词器-查询文档


•词条查询:term


词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时才匹配搜索


•全文查询:match


全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集。


1.创建索引,添加映射,并指定分词器为ik分词器

PUT person2
{
 "mappings": {
  "properties": {
   "name": {
    "type": "keyword"
  },
   "address": {
    "type": "text",
    "analyzer": "ik_max_word"
  }
 }
}
}

2.添加文档

POST /person2/_doc/1
{
"name":"张三",
"age":18,
"address":"北京市的海淀区"
}
POST /person2/_doc/2
{
"name":"李四",
"age":18,
"address":"北京市朝阳区"
}
POST /person2/_doc/3
{
"name":"王五",
"age":18,
"address":"北京市的¥¥¥¥昌平区"
}

3.查询映射

GET person2/_search

 

 4.查看分词效果

GET _analyze
{
   "analyzer": "ik_max_word",
   "text": "北京海淀"
}

 

 

5.词条查询:term


查询person2中匹配到"北京"两字的词条

GET /person2/_search
{
 "query": {
  "term": {
   "address": {
    "value": "北京"
  }
 }
}
}

 

 

 GET /person2/_search
{
 "query": {
  "term": {
   "address": {
    "value": "北京昌平"
  }
 }
}
}

这个查不到数据。

 

 

6.全文查询:match
全文查询会分析查询条件,先将查询条件进行分词,然后查询,求并集

GET /person2/_search
{
"query": {
 "match": {
  "address":"北京昌平"
 }
}
}

 

 

 

 

 

 

 

GET /person2/_search
{
"query": {
"match": {
"address":"北京 区"
}
}
}

 

标签:ik,查询,person2,IK,ElasticSearch,分词器,offset,type
From: https://www.cnblogs.com/puzi0315/p/16990549.html

相关文章

  • ElasticSearch学习笔记(2)-数据类型
    一、ES数据类型1、简单数据类型(1)字符串text:会分词,不支持聚合keyword:不会分词,将全部内容作为一个词条,支持聚合 (2)数值long,integer,short,double,float(3)布尔boolean(4)......
  • ElasticSearch学习笔记(3)-常用的操作
    可以使用Postman的接口调用,也可以使用kibana来操作。kibana操作相对简单一些。一、索引的操作1、查询GEThttp://ip:端口/索引名称      #查询单个索引信息......
  • ElasticSearch系列---【Es的快速入门文档】
    Es的快速入门文档1.对比数据库理解ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档。 注意:从ElasticSearch6.X开始,一个Index下只能包含一个Type,因此,在Ela......
  • 整理的 英文 c/c++ 编程 wiki
    不断更新中。。。 allwikis ​​http://wiki.linuxquestions.org/wiki/C/C%2B%2B_Tutorials​​C++/C,国外一个开发者自己收集的站点​​http://www.shokhirev.com/nik......
  • 关于 ipv4 ipv6 socket 编程 wiki
     Beej'sGuidetoNetworkProgrammingUsingInternetSockets ​​http://www.retran.com/beej/index.html​​  Berkeleysockets ​​http://en.wikipedia.org/wiki......
  • 调试+linux+网络问题+wiki
    SimpleNetworkTroubleshooting​​http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch04_:_Simple_Network_Troubleshooting​​​​http://www.linuxh......
  • Elasticsearch解决问题之道——请亮出你的DSL!
    Elasticsearch最少必要知识实战教程直播回放#0、引言在业务开发中,我们往往会陷入开发的细枝末节之中,而忽略了事物的本源。经常有同学问到:1,业务代码实现结果和kibana......
  • 【Tikhonov】基于Tikhonov正则化的图像超分辨率重建
    1.软件版本matlab2013b2.系统原理对于图像超分辨率重建的问题,常常涉及到大规模的方程组求解,且方程的维数往往很大。所以正则化方法的求解算法中常用到迭代算法。这里主......
  • 如何从0到1打磨一门 Elasticsearch 线上直播课?
    拔掉网线接口这个平时一秒钟就搞定的事,我愣是搞了半分钟才拔出来。这是我昨晚11点半最后一次直播后的最直接感受:嗓子嘶哑、身心俱疲。从2021年8月16日接到李猛老师邀约和......
  • 你的 Elasticsearch 难题,官方文档早就有了答案......
    Elasticsearch最少必要知识实战教程直播回放女艺人都开始学习Elasticsearch了看到朋友圈大佬都在转载:足见Elasticsearch的热度。近几年,活跃于Elasticsearch中文社......