这篇文章主要是来浅谈一下elasticsearch的分词原理,让各位同学对分词不再陌生~

废话不多说,我们直接上干货


前言一

  • 我们创建一个文档

PUT test/_doc/1
{"msg":"乔丹是篮球之神"
}
  • 我们通过'乔丹'这个关键词来搜索这个文档
POST /test/_search
{"query": {"match": {"msg": "乔丹"}}
}

  • 我们发现能匹配文档出来,那整一个过程的原理是怎样的呢?


前言二

  • 我们来试下使用中文分词器(安装分词过程省略)
PUT test/_mapping
{"properties": {"msg_chinese":{"type":"text","analyzer": "ik_max_word"}}
}
POST test/_doc/1
{"msg":"乔丹是篮球之神","msg_chinese":"乔丹是篮球之神"
}
  • 分别对两个不同类型的字段,通过‘乔’来搜索,看能不能搜出来
POST /test/_search
{"query": {"match": {"msg_chinese": "乔"}}
}

POST /test/_search
{"query": {"match": {"msg": "乔"}}
}

  • 为什么同样是输入'乔',为什么msg能匹配出文档,而msg_chinese不能呢?


写时分词

  • 我们使用来分析这个msg这个字段是怎样分词的
POST test/_analyze
{"field": "msg","text": "乔丹是篮球之神"
}

乔,丹,是,篮,球,之,神
  • 再来分析这个msg_chinese这个字段是怎样分词的
POST test/_analyze
{"field": "msg_chinese","text": "乔丹是篮球之神"
}

乔丹, 是, 篮球, 之神
  • 文档写入的时候会根据字段设置的分词器类型进行分词,如果不指定就是默认的standard分词器。

  • 写时分词器需要在mapping中指定,而且一旦指定就不能再修改,若要修改必须重建索引。


读时分词

  • 由于读时分词器默认与写时分词器默认保持一致,拿上面的例子,你搜索 msg 字段,那么读时分词器为 Standard ,搜索 msg_chinese 时分词器则为 ik_max_word。这种默认设定也是非常容易理解的,读写采用一致的分词器,才能尽最大可能保证分词的结果是可以匹配的。

  • 允许读时分词器单独设置

POST test/_search
{"query": {"match": {"msg_chinese": {"query": "乔丹","analyzer": "standard"}}}
}
  • 一般来讲不需要特别指定读时分词器,如果读的时候不单独设置分词器,那么读时分词器的验证方法与写时一致。

深入分析

  • 分析器(analyzer)有三部分组成

    • char filter : 字符过滤器

    • tokenizer : 分词器

    • token filter :token过滤器

  • char filter(字符过滤器)

    • 字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换该流。一个分析器可能有0个或多个字符过滤器。

  • tokenizer (分词器)

    • 一个分词器接收一个字符流,并将其拆分成单个token (通常是单个单词),并输出一个token流。比如使用whitespace分词器当遇到空格的时候会将文本拆分成token。"eating an apple" >> [eating, and, apple]。一个分析器必须只能有一个分词器

      POST _analyze
      {"text": "eating an apple","analyzer": "whitespace"
      }
      
  • token filter (token过滤器)

    • token过滤器接收token流,并且可能会添加、删除或更改tokens。比如一个lowercase token filter可以将所有的token转成小写。一个分析器可能有0个或多个token过滤器,它们按顺序应用。

  • standard分析器

    • tokenizer

      • Stanard tokenizer

    • token filters

      • Standard Token Filter

      • Lower Case Token Filter


浅谈elasticsearch的分词原理相关推荐

  1. ElasticSearch(7.2.2)-浅谈es的分词原理

    简介:谈谈elasticsearch的分词原理 前⾔⼀ 我们创建⼀个⽂档 PUT test/_doc/1{"msg":"乔丹是篮球之神"} 我们通过'乔丹'这个 ...

  2. 浅谈Rem 及其转换原理

    浅谈Rem 及其转换原理 今天有小伙伴问了我Rem的转换原理,那我就写篇博客记录一下吧! rem 是 CSS3 新增的相对长度单位,是指相对于元素 html 的 font-size 计算值 的大小. ...

  3. 浅谈人工智能的工作原理

    众所周知人工智能现在快速发展,并且为众人所熟知,不仅如此,人工智能也在各行各业中广泛使用.那么人工智能的工作原理是什么呢? 浅谈人工智能的工作原理 人类智能由三个部分构成(还有些其他生物学和科学现象也 ...

  4. 动态磅是怎么原理_浅谈动态地磅的原理及未来发展方向

    浅谈动态地磅的原理及未来发展方向: 文章介绍了动态地磅的结构和工作原理,针对动态地磅的分类做了全面的概述,分别对不同的动态地磅做了对比及详细的阐述,说明选择和使用动态地磅器的注意事项,凸显了轴组式动态 ...

  5. 浅谈 git 底层工作原理

    浅谈 git 底层工作原理 系统复习到这里也快差不多了,大概就剩下两三个 sections,这里学习一下 git 的 hashing 和对象. 当然,跳过问题也不大. config 文件 这里还是会用 ...

  6. 伺服驱动器生产文件_浅谈伺服驱动器的工作原理

    原标题:浅谈伺服驱动器的工作原理 目前,主流的伺服驱动器均采用数字信号处理器(DSP)作为控制核心,可以实现比较复杂的控制算法,实现数字化.网络化和智能化.功率器件普遍采用以智能功率模块(IPM)为核 ...

  7. 深入浅谈,CPU设计原理

    首先,声明这是一篇转载文,这篇文章是,从卡饭论坛 看到的一篇文章<深入浅谈,CPU设计原理>,是一篇连载,文章,卡饭论坛,是我高中的时候,经常去的论坛,里面有很多好的文章,推荐给大家.也许 ...

  8. 浅谈代理服务器工作的原理

    浅谈代理服务器工作的原理 (1) 代理服务原理 代理服务器有很多种,大体来说有http,ftp,socks代理三种,其中又分透明代理和不透明代理.其中透明代理一般是网关,是硬件.所以这里讨论不透明代理 ...

  9. 浅谈《微信抢红包原理》

    现在很多人手机可能都安装了抢红包软件,为了过年抢红包不错过,当然会下载来用用,其实,现在的抢红包软件,基本都是通过监听通知栏消息"[微信红包]"字样,作为识别是红包的依据的,可能大 ...

最新文章

  1. C 盘FAT32变为 RAW 格式
  2. maven 构建java项目,jdk版本问题
  3. mysql的事务操作
  4. 自动检测CSRF漏洞的工具
  5. ds18b20触摸没反应_DS18B20温度偏差大、温度乱跳动原因及解决办法
  6. 查询中接受的主体参数_Apollo入门引导(三):编写查询解析器
  7. 面试经验:求职面试时的835守则
  8. c语言经典游戏,C语言——经典小游戏——打砖块
  9. 通用 字符串工具类
  10. Security+ 学习笔记11 应用程序攻击
  11. 【LeetCode】【字符串】题号:*451. 根据字符出现频率排序
  12. 捷联式惯导系统初始对准
  13. 基于SSM的个人博客系统(数据库+源码)
  14. Hdu--5064(DP)
  15. (翻译)优秀价格表的7种设计策略
  16. vue动态加载SVG文件并修改节点数据
  17. python+机器学习方法进行情感分析
  18. php网页全屏背景图代码,HTML5 body设置全屏背景图片的示例代码
  19. 洪荒制作量子计算机 小说,洪荒:从南天门开始
  20. centos7 应用笔记: 添加 编辑 Applications 菜单 功能

热门文章

  1. 老猿学5G扫盲贴:PDU协议数据单元、PDU连接业务和PDU会话的功能详解
  2. java arraylist .get_Java ArrayList get()方法与示例
  3. 电脑分辨率高,plsql显示太小,怎么设置
  4. 如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化...
  5. node 获取本机ip
  6. poi生成的微软word打不开,但是wps可以打开,请大神帮忙解答下,灰常感谢
  7. java 判断dir是否存在_谁可以帮忙写一段java判断文件或者文件夹是否存在的代码...
  8. 菜鸟裹裹App分析系列-UI框架设计分析
  9. TransactionScope的使用
  10. 将bmp图像转换为ppm格式