1、默认的分词器

关于分词器,前面的博客已经有介绍了,链接:ElasticSearch7.3 学习之倒排索引揭秘及初识分词器(Analyzer)。这里就只介绍默认的分词器standard analyzer

2、 修改分词器的设置

首先自定义一个分词器es_std。启用english停用词token filter

  1. PUT /my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "es_std": {
  7. "type": "standard",
  8. "stopwords": "_english_"
  9. }
  10. }
  11. }
  12. }
  13. }

返回:

接下来开始测试两种不同的分词器,首先是默认的分词器

  1. GET /my_index/_analyze
  2. {
  3. "analyzer": "standard",
  4. "text": "a dog is in the house"
  5. }

返回结果

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "a",
  5. "start_offset" : 0,
  6. "end_offset" : 1,
  7. "type" : "<ALPHANUM>",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "dog",
  12. "start_offset" : 2,
  13. "end_offset" : 5,
  14. "type" : "<ALPHANUM>",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "is",
  19. "start_offset" : 6,
  20. "end_offset" : 8,
  21. "type" : "<ALPHANUM>",
  22. "position" : 2
  23. },
  24. {
  25. "token" : "in",
  26. "start_offset" : 9,
  27. "end_offset" : 11,
  28. "type" : "<ALPHANUM>",
  29. "position" : 3
  30. },
  31. {
  32. "token" : "the",
  33. "start_offset" : 12,
  34. "end_offset" : 15,
  35. "type" : "<ALPHANUM>",
  36. "position" : 4
  37. },
  38. {
  39. "token" : "house",
  40. "start_offset" : 16,
  41. "end_offset" : 21,
  42. "type" : "<ALPHANUM>",
  43. "position" : 5
  44. }
  45. ]
  46. }

可以看到就是简单的按单词进行拆分,在接下来测试上面自定义的一个分词器es_std

  1. GET /my_index/_analyze
  2. {
  3. "analyzer": "es_std",
  4. "text":"a dog is in the house"
  5. }

返回:

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "dog",
  5. "start_offset" : 2,
  6. "end_offset" : 5,
  7. "type" : "<ALPHANUM>",
  8. "position" : 1
  9. },
  10. {
  11. "token" : "house",
  12. "start_offset" : 16,
  13. "end_offset" : 21,
  14. "type" : "<ALPHANUM>",
  15. "position" : 5
  16. }
  17. ]
  18. }

可以看到结果只有两个单词了,把停用词都给去掉了。

3、定制化自己的分词器

首先删除掉上面建立的索引

  1. DELETE my_index

然后运行下面的语句。简单说下下面的规则吧,首先去除html标签,把&转换成and,然后采用standard进行分词,最后转换成小写字母及去掉停用词a the,建议读者好好看看,下面我也会对这个分词器进行测试。

  1. PUT /my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "char_filter": {
  6. "&_to_and": {
  7. "type": "mapping",
  8. "mappings": [
  9. "&=> and"
  10. ]
  11. }
  12. },
  13. "filter": {
  14. "my_stopwords": {
  15. "type": "stop",
  16. "stopwords": [
  17. "the",
  18. "a"
  19. ]
  20. }
  21. },
  22. "analyzer": {
  23. "my_analyzer": {
  24. "type": "custom",
  25. "char_filter": [
  26. "html_strip",
  27. "&_to_and"
  28. ],
  29. "tokenizer": "standard",
  30. "filter": [
  31. "lowercase",
  32. "my_stopwords"
  33. ]
  34. }
  35. }
  36. }
  37. }
  38. }

返回

  1. {
  2. "acknowledged" : true,
  3. "shards_acknowledged" : true,
  4. "index" : "my_index"
  5. }

老规矩,测试这个分词器

  1. GET /my_index/_analyze
  2. {
  3. "analyzer": "my_analyzer",
  4. "text": "tom&jerry are a friend in the house, <a>, HAHA!!"
  5. }

结果如下:

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "tomandjerry",
  5. "start_offset" : 0,
  6. "end_offset" : 9,
  7. "type" : "<ALPHANUM>",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "are",
  12. "start_offset" : 10,
  13. "end_offset" : 13,
  14. "type" : "<ALPHANUM>",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "friend",
  19. "start_offset" : 16,
  20. "end_offset" : 22,
  21. "type" : "<ALPHANUM>",
  22. "position" : 3
  23. },
  24. {
  25. "token" : "in",
  26. "start_offset" : 23,
  27. "end_offset" : 25,
  28. "type" : "<ALPHANUM>",
  29. "position" : 4
  30. },
  31. {
  32. "token" : "house",
  33. "start_offset" : 30,
  34. "end_offset" : 35,
  35. "type" : "<ALPHANUM>",
  36. "position" : 6
  37. },
  38. {
  39. "token" : "haha",
  40. "start_offset" : 42,
  41. "end_offset" : 46,
  42. "type" : "<ALPHANUM>",
  43. "position" : 7
  44. }
  45. ]
  46. }

最后我们可以在实际使用时设置某个字段使用自定义分词器,语法如下:

  1. PUT /my_index/_mapping/
  2. {
  3. "properties": {
  4. "content": {
  5. "type": "text",
  6. "analyzer": "my_analyzer"
  7. }
  8. }
  9. }

ElasticSearch7.3 学习之定制分词器(Analyzer)的更多相关文章

  1. ElasticSearch7.3 学习之倒排索引揭秘及初识分词器(Analyzer)

    一.倒排索引 1. 构建倒排索引 例如说有下面两个句子doc1,doc2 doc1:I really liked my small dogs, and I think my mom also like ...

  2. Lucene.net(4.8.0) 学习问题记录一:分词器Analyzer的构造和内部成员ReuseStategy

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  3. Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息

    Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息 在此回复牛妞的关于程序中分词器的问题,其实可以直接很简单的在词库中配置就好了,Lucene中分词的所有信息我们都可以从 ...

  4. es的分词器analyzer

    analyzer   分词器使用的两个情形:  1,Index time analysis.  创建或者更新文档时,会对文档进行分词2,Search time analysis.  查询时,对查询语句 ...

  5. Lucene.net(4.8.0)+PanGu分词器问题记录一:分词器Analyzer的构造和内部成员ReuseStategy

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  6. Elasticsearch:定制分词器(analyzer)及相关性

    转载自:https://elasticstack.blog.csdn.net/article/details/114278163 在许多的情况下,我们使用现有的分词器已经足够满足我们许多的业务需求,但 ...

  7. Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  8. es学习(三):分词器介绍以及中文分词器ik的安装与使用

    什么是分词 把文本转换为一个个的单词,分词称之为analysis.es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体. 示例 POST http://192.168.247.8: ...

  9. ElasticSearch7.3 学习之定制动态映射(dynamic mapping)

    1.dynamic mapping ElasticSearch中有一个非常重要的特性--动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 当ES在文档中 ...

随机推荐

  1. nvidia-smi

    内容转自:https://blog.csdn.net/handsome_bear/article/details/80903477 nvidia-smi 显示 说明 Fan 风扇转速(0%--100% ...

  2. 【BZOJ3545】Peaks(Kruskal重构树 主席树)

    题目链接 大意 给出有\(N\)个点\(M\)条边的一张图,其中每个点都有一个High值,每条边都有一个Hard值. 再给出\(Q\)个询问:\(v\) \(x\) \(k\) 每次询问查询从点\(v ...

  3. Redis 源码简洁剖析 11 - 主 IO 线程及 Redis 6.0 多 IO 线程

    Redis 到底是不是单线程的程序? 多 IO 线程的初始化 IO 线程运行函数 IOThreadMain 如何推迟客户端「读」操作? 如何推迟客户端「写」操作? 如何把待「读」客户端分配给 IO 线 ...

  4. 读写分离&分库分表学习笔记

    读写分离 何为读写分离? 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上. 这样的话,就能够小幅提升写性能,大幅提升读性能. 我简单画了一 ...

  5. 降维处理PCA

    要理解什么是降维,书上给出了一个很好但是有点抽象的例子. 说,看电视的时候屏幕上有成百上千万的像素点,那么其实每个画面都是一个上千万维度的数据:但是我们在观看的时候大脑自动把电视里面的场景放在我们所能 ...

  6. opencv笔记-SimpleBlobDetector

    通用的 Blob 检测方法包括:Laplacian of Gaussian(LoG), Difference of Gaussian(DoG), Derterminant of Hessian(DoH ...

  7. 5.1 Paralles 为虚拟机设置静态ip

    一.配置独立ip的环境 前面研究了k8s的组件,核心概念,网络模型,都了解了一遍,现在就要进入实战了,摆在面前的一座大山,必须克服才行---虚拟机搭建,及网络环境配置. 先说说本文的运行环境: mac ...

  8. v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  9. MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog

    Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,有很多相似之处同时也有差别,本文探究两者细节和区别. 一.Redo Log 1.Redo Log介绍 Redo:顾名思义就是重做 ...

  10. 分布式缓存NCache使用

    NCache作为缓存优点币Redis有优势,但是收费的所以选用的不多吧.下面简单实操一下: 首先官网下载组件NCache Download Center (alachisoft.com),这里选择企业 ...