Elasticsearch Analyzer 内置分词器

篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们

前置知识

es 提供了 analyze api 可以方便我们快速的指定 某个分词器 然后对输入的text文本进行分词 帮助我们学习和实验分词器

POST _analyze
{"analyzer": "standard","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

1.Analyzer

在ES中有很重要的一个概念就是 分词,ES的全文检索也是基于分词结合倒排索引做的。所以这一文我们来看下何谓之分词。如何分词。

分词器是专门处理分词的组件,在很多中间件设计中每个组件的职责都划分的很清楚,单一职责原则,以后改的时候好扩展。 分词器由三部分组成。

  • Character Filters : 主要对原文本做处理, 例如 去除 html 标签
  • Tokenizer : 按照规则 把文本切分为单词, 也就是分词
  • Token Filters : 将切分后的单词 进行加工处理, 小写,删除stopwords 停顿词, 增加同义词 , 扩展一些

分词场景:

  1. 数据写入index 的时候进行分词
  2. query 查询时候 需要对查询文本 进行分词

2.Elasticsearch 内置分词器

在es中有不少内置分词器

  • Standard Analyzer : 默认分词器, 按Unicode文本分割算法拆分 , 转化为小写 , 支持中文(但是中文按照每个文字拆分,没啥意义)
  • Simple Analyzer : 按照非字母切分 并且转化为小写
  • Stop Analyzer : 和 simple 一样 但是多了 过滤停用词(the a is) 默认使用 stop token filter 的 _ _ english _ _ 预定义
  • Whitespace Analyzer : 每当遇到 空格的时候 会进行分词 , 不会转小写
  • Keyword Analyzer : 不分词 直接将输入当做输出
  • Patter Analyzer : 正则表达式
  • Language : 语言分词器 30多种
  • Customer Analyzer : 自定义分词器

3. Standard Analyzer

Standard 是es中默认的分词器 , 它是按照 Unicode 文本分割算法去 对文本进行分词的

POST _analyze
{"analyzer": "standard","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

3.1 Definition

包括了 转小写的 token filter 和 stop token filter 去除停顿词

Tokenizer

  • [Standard Tokenizer]

Token Filters

  • [Standard Token Filter] : 没用只是作为保留的token filter (The standard token filter currently does nothing. It remains as a placeholder in case some filtering function needs to be added in a future version.)
  • [Lower Case Token Filter] : 转小写的 token filter
  • [Stop Token Filter] : 停顿词 token filter 默认是没有开启

3.2 Configuration

  • max_token_length : 最大的分词长度,如果超过此长度 则直接分词 default 255
  • stopwords : 预定义的停顿词列表 如: _ _ englisth _ _ 或者 停顿词数组[] 默认 none 不设置
  • stopwords_path : 包含停顿词的文件路径

3.3 实验

// 使用 自定义的分词器 基于 standard
PUT my_index
{"settings": {"analysis": {"analyzer": {"my_english_analyzer": {"type": "standard", "max_token_length": 5, // 最大词数"stopwords": "_english_" // 开启过滤停顿词 使用 englisth 语法}}}}
}GET my_index/_analyze
{"analyzer": "my_english_analyzer","text": "The hellogoodname jack"
}
// 可以看到 最长5个字符 就需要进行分词了, 并且停顿词 the 没有了
["hello", "goodn", "ame", "jack"]

4. Simple Analyzer

简单的分词器 分词规则就是 遇到 非字母的 就分词, 并且转化为小写,(lowercase tokennizer )

POST _analyze
{"analyzer": "simple","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

4.1 Definition

Tokenizer

  • Lower Case Tokenizer

4.2 Configuation

无配置参数

4.3 实验

simple analyzer 分词器的实现 就是如下

PUT /simple_example
{"settings": {"analysis": {"analyzer": {"rebuilt_simple": {"tokenizer": "lowercase","filter": [         ]}}}}
}

5. Stop Analyzer

stop analyzer 和 simple analyzer 一样, 只是多了 过滤 stop word 的 token filter , 并且默认使用 english 停顿词规则

POST _analyze
{"analyzer": "stop","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
// 可以看到 非字母进行分词 并且转小写 然后 去除了停顿词
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]

5.1 Definition

Tokenizer

  • Lower Case Tokenizer : 转小写的

Token filters

  • Stop Token Filter : 过滤停顿词 默认使用 规则 english

5.2 Configuration

  • stopwords : 指定分词的规则 默认 english , 或者分词的数组
  • stopwords_path : 指定分词停顿词文件

5.3 实验

如下就是对 Stop Analyzer 的实现 , 先转小写 后进行停顿词的过滤

PUT /stop_example
{"settings": {"analysis": {"filter": {"english_stop": {"type":       "stop","stopwords":  "_english_" }},"analyzer": {"rebuilt_stop": {"tokenizer": "lowercase","filter": ["english_stop"          ]}}}}
}

设置 stopwords 参数 指定过滤的停顿词列表

PUT my_index
{"settings": {"analysis": {"analyzer": {"my_stop_analyzer": {"type": "stop","stopwords": ["the", "over"]}}}}
}POST my_index/_analyze
{"analyzer": "my_stop_analyzer","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}[ quick, brown, foxes, jumped, lazy, dog, s, bone ]

6. Whitespace Analyzer

空格 分词器, 顾名思义 遇到空格就进行分词, 不会转小写

POST _analyze
{"analyzer": "whitespace","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]

6.1 Definition

Tokenizer

  • Whitespace Tokenizer

6.2 Configuration

无配置

6.3 实验

whitespace analyzer 的实现就是如下, 可以根据实际情况进行 添加 filter

PUT /whitespace_example
{"settings": {"analysis": {"analyzer": {"rebuilt_whitespace": {"tokenizer": "whitespace","filter": [         ]}}}}
}

7. Keyword Analyzer

很特殊 它不会进行分词, 怎么输入 就怎么输出

POST _analyze
{"analyzer": "keyword","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}//注意 这里并没有进行分词 而是原样输出
[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]

7.1 Definition

Tokennizer

  • Keyword Tokenizer

7.2 Configuration

无配置

7.3 实验

rebuit 如下 就是 Keyword Analyzer 实现

PUT /keyword_example
{"settings": {"analysis": {"analyzer": {"rebuilt_keyword": {"tokenizer": "keyword","filter": [         ]}}}}
}

8. Patter Analyzer

正则表达式 进行拆分 ,注意 正则匹配的是 标记, 就是要被分词的标记 默认是 按照 \w+ 正则分词

POST _analyze
{"analyzer": "pattern","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
// 默认是 按照 \w+ 正则
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

8.1 Definition

Tokennizer

  • Pattern Tokenizer

Token Filters

  • Lower Case Token Filter
  • Stop Token Filter (默认未开启)

8.2 Configuration

pattern A Java regular expression, defaults to \W+.
flags Java regular expression.
lowercase 转小写 默认开启 true.
stopwords 停顿词过滤 默认none 未开启 , Defaults to _none_.
stopwords_path 停顿词文件路径

8.3 实验

Pattern Analyzer 的实现 就是如下

PUT /pattern_example
{"settings": {"analysis": {"tokenizer": {"split_on_non_word": {"type":       "pattern","pattern":    "\\W+" }},"analyzer": {"rebuilt_pattern": {"tokenizer": "split_on_non_word","filter": ["lowercase"       ]}}}}
}

9. Language Analyzer

提供了如下 这么多语言分词器 , 其中 english 也在其中

arabic, armenian, basque, bengali, bulgarian, catalan, czech, dutch, english, finnish, french, galician, german, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, portuguese, romanian, russian, sorani, spanish, swedish, turkish.

GET _analyze
{"analyzer": "english","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ 2, quick, brown, foxes, jumped, over, lazy, dog, bone ]

10. Customer Analyzer

没啥好说的 就是当提供的 内置分词器不满足你的需求的时候 ,你可以结合 如下3部分

  • Character Filters : 主要对原文本做处理, 例如 去除 html 标签
  • Tokenizer : 按照规则 把文本切分为单词, 也就是分词
  • Token Filters : 将切分后的单词 进行加工处理, 小写,删除stopwords 停顿词, 增加同义词 , 扩展一些
PUT my_index
{"settings": {"analysis": {"analyzer": {"my_custom_analyzer": {"type": "custom","char_filter": ["emoticons" ],"tokenizer": "punctuation", "filter": ["lowercase","english_stop" ]}},"tokenizer": {"punctuation": { "type": "pattern","pattern": "[ .,!?]"}},"char_filter": {"emoticons": { "type": "mapping","mappings": [":) => _happy_",":( => _sad_"]}},"filter": {"english_stop": { "type": "stop","stopwords": "_english_"}}}}
}POST my_index/_analyze
{"analyzer": "my_custom_analyzer","text":     "I'm a :) person, and you?"
}[ i'm, _happy_, person, you ]

总结

本篇主要介绍了 Elasticsearch 中 的一些 内置的 Analyzer 分词器, 这些内置分词器可能不会常用,但是如果你能好好梳理一下这些内置 分词器,一定会对你理解Analyzer 有很大的帮助, 可以帮助你理解 Character Filters , Tokenizer 和 Token Filters 的用处.

有机会再聊聊 一些中文分词器 如 IKAnalyzer, ICU Analyzer ,Thulac 等等.. 毕竟开发中 中文分词器用到更多些

欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号

Elasticsearch Analyzer 内置分词器相关推荐

  1. Elasticsearch 内置分词器

    Elasticsrarch 提供了8中内置分词器,它们可以无需任何配置即可使用.每一个分词器都由3部分组件组成:Character Filters.Tokenizer和Token Filters,这3 ...

  2. Elasticsearch7 分词器(内置分词器和自定义分词器)

    文章目录 Elasticsearch7 分词器(内置分词器和自定义分词器) analysis 概览 char_filter html_strip mapping pattern_replace fil ...

  3. 架构师成长记_第八周_10_ES-分词与五种内置分词器

    文章目录 ES-分词 PS: 1. 全局分析方式(_analyze) 2. 指定字段分析方式(索引名/_analyze) ES-五种内置分词器介绍 1 标准分词器 standard 2 非字母分词器 ...

  4. 二、ElasticSearch内置分词器

    这里讲解下常见的几个分词器:Standard Analyzer.Simple Analyzer.whitespace Analyzer. 1.Standard Analyzer(默认) 1)示例 st ...

  5. ElasticSearch 中的中文分词器以及索引基本操作详解

    文章目录 1.ElasticSearch 分词器介绍 1.1 内置分词器 1.2 中文分词器 1.2.1 安装 1.2.2 测试 1.2.3 自定义扩展词库 1.2.3.1 本地自定义 1.2.3.2 ...

  6. ElasticSearch 中的中文分词器该怎么玩?_03

    内置分词器 ElasticSearch 核心功能就是数据检索,首先通过索引将文档写入 es.查询分析则主要分为两个步骤: 词条化:分词器将输入的文本转为一个一个的词条流. 过滤:比如停用词过滤器会从词 ...

  7. Elasticsearch中安装IK分词器

    Elasticsearch中默认的分词器对中文的支持不好,会分隔成一个一个的汉字.而IK分词器对中文的支持比较好一些,主要有两种模式"ik_smart"和"ik_max_ ...

  8. 服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程

    docker安装配置elasticsearch,kibana和IK分词器 elasticsearch文章系列 前置安装docker 创建docker网络 安装Elasticsearch 运行elast ...

  9. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如何在Elasticsearch中安装中文分词器(IK+pinyin) 如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当 ...

最新文章

  1. 汉诺塔问题hdu 2065——找规律
  2. Clumsy 弱网络环境模拟工具使用介绍
  3. html程序国庆节祝福,2018国庆节祝福祖国的话
  4. 如何在Spring Boot App中集成H2数据库
  5. linux常见紧急情况处理
  6. 论文浅尝 | Wordly Wise(WoW) - 用于语音视觉知识问答的跨语言知识融合模型
  7. 蚂蚁架构师郭援非:分布式数据库是金融机构数字化转型的最佳路径
  8. 可视化与办公自动化学习
  9. 简述静态全局变量的概念 C++
  10. html+css制作一个浪漫爱心表白网页 表白网页在线制作 最浪漫的表白网页
  11. Halcon 学习笔记 (一)
  12. 图片复印如何去除黑底_手机拍的文字图片,打印出来都是灰底黑字,怎样才能变成白底黑字?...
  13. 机器学习模型训练全流程!
  14. Spark独到见解--3控制算子
  15. Hadoop——MapReduce相关eclipse配置及Api调用(图文超详细版)(内含遇到错误的解决方法)
  16. vue项目,解决IE浏览器报Promise未定义的错误
  17. 心血漏洞(OpenSSL升级)
  18. Android 应用清单简介1
  19. CCF中国开源大会开源雨林论坛丨七大亮点议题抢鲜看!
  20. ffmpeg切割音频文件

热门文章

  1. 2014-2019CUMCM_题型总结
  2. 关于校园一卡通的便携化及Mifare M1卡的内部结构
  3. 2022年湖南成考潇湘成招健康打卡时间已调整
  4. 技术往事:改变世界的TCP/IP协议(珍贵多图、手机慎点)
  5. DIY定制设计小程序开发制作功能介绍
  6. 微信小程序实现pdf、word等格式文件上传的方法
  7. Northwind中文版Access2000、MSSQL版也适用LinqPad学习
  8. STM32CubeMX | 32-使用硬件FMC驱动TFT-LCD屏幕(MCU屏)
  9. html超链接跳出脚本错误,Windows7打开网页弹出当前页面的脚本发生错误如何解决?...
  10. Go报错Finished running tool: 路径,current directory outside main module .... dependencies 的解决方法