Elasticsrarch 提供了8中内置分词器,它们可以无需任何配置即可使用。每一个分词器都由3部分组件组成:Character Filters、Tokenizer和Token Filters,这3个组件就像一个流水线一样对输入的文本进行分词处理。

  • Character Filters: 对输入的文本进行第一次处理,例如去除文本中html标签符号
  • Tokenizer:对上一步处理后的结果按照规则进行单词拆分。
  • Token Filters:将切分后的单词进行二次加工,例如转小写、删除stop words、增加同义词等操作

例如,使用standard分词器,对文本“<h2>Hi</h2>,My name is QiQi.”处理过程为:

  1. Character fileters将<>去除,结果为: h2 Hi h2,My name is QiQi.(不同的character filter处理结果可能不同)
  2. Tokenizer 继续对上一步的结果进行处理,去掉符号,结果为h2 Hi h2 My name is QiQi
  3. Token Filters 对分词后的单词进一步处理,将单词转为小写,结果h2 hi h2 my name is qiqi
  4. 最终结果就是h2 hi h2 my name is qiqi

Elasticsearch 内置分词器

  • Standard 分词器
  • Simple 分词器
  • Whitespace Analyzer
  • Stop Analyzer
  • Keyword Analyzer
  • Pattern Analyzer
  • Language Analyzers
  • Fingerprint Analyzer

Standard 分词器

standard分词器按照单词的边界将文本分词(根据Unicode文本分割算法),它将大多数标点符号删除,将分割的词的开头大小字母转为小写,并支持删除stop words(默认配置关闭)。

什么是stop words?
在信息检索中,停用词是为节省存储空间和提高搜索效率,处理文本时自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。停用词大致分为两类。一类是语言中的功能词,这些词极其普遍而无实际含义,比如“the”、“is“、“which“、“on”等。另一类是词汇词,比如’want’等,这些词应用广泛,但搜索引擎无法保证能够给出真正相关的搜索结果,难以缩小搜索范围,还会降低搜索效率。实践中,通常把这些词从问题中过滤,从而节省索引的存储空间、提高搜索性能。

例如对“I am a student.”分词:

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"text":"I am a student.","analyzer":"standard"
}'
{"tokens": [{"token": "i","start_offset": 0,"end_offset": 1,"type": "<ALPHANUM>","position": 0},{"token": "am","start_offset": 2,"end_offset": 4,"type": "<ALPHANUM>","position": 1},{"token": "a","start_offset": 5,"end_offset": 6,"type": "<ALPHANUM>","position": 2},{"token": "student","start_offset": 7,"end_offset": 14,"type": "<ALPHANUM>","position": 3}]
}

standard 分词器按照每个单词进行拆分,并将单词转为小写,并去掉大多数符号。

Simple 分词器

将文本按照非字母字符进行拆分,并将分词转为小写。
例如对I123am a student.使用simple分词器分词:

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
--data-raw '{"analyzer":"simple","text":"I123am a student."
}'
{"tokens": [{"token": "i","start_offset": 0,"end_offset": 1,"type": "word","position": 0},{"token": "am","start_offset": 4,"end_offset": 6,"type": "word","position": 1},{"token": "a","start_offset": 7,"end_offset": 8,"type": "word","position": 2},{"token": "student","start_offset": 9,"end_offset": 16,"type": "word","position": 3}]
}

I123am 分成了i am两个term并去掉了123单词转小写,去掉符号。

Whitespace Analyzer

Whitespace分词器使用空格进行分词,不对token进行小写转换,也不删除分词后的符号。
例如,对文本Good morning!Miss Wang!分词

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"analyzer":"whitespace","text":"Good morning!Miss Wang!"
}'
{"tokens": [{"token": "Good","start_offset": 0,"end_offset": 4,"type": "word","position": 0},{"token": "morning!Miss","start_offset": 5,"end_offset": 17,"type": "word","position": 1},{"token": "Wang!","start_offset": 18,"end_offset": 23,"type": "word","position": 2}]
}

Stop Analyzer

stop分词器和simple很像,只是不支持删除stop words

Keyword Analyzer

keyword分词器对输入的文本不做分词处理,将整个输入作为一个term

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"analyzer":"keyword","text":"Good morning!Miss Wang!"
}'
{"tokens": [{"token": "Good morning!Miss Wang!","start_offset": 0,"end_offset": 23,"type": "word","position": 0}]
}

Pattern Analyzer

使用正则表达式对文本进行分割。并且支持小写转换,去除符号和stop words。默认使用的正则表达式为\W+
例如对Good morning!Miss Wang!进行分词:

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"analyzer":"pattern","text":"Good morning!Miss Wang!"
}'
{"tokens": [{"token": "good","start_offset": 0,"end_offset": 4,"type": "word","position": 0},{"token": "morning","start_offset": 5,"end_offset": 12,"type": "word","position": 1},{"token": "miss","start_offset": 13,"end_offset": 17,"type": "word","position": 2},{"token": "wang","start_offset": 18,"end_offset": 22,"type": "word","position": 3}]
}

Language Analyzers

Elasticsearch提供许多特定于语言的分析器,如英语或法语。
例如使用chinese我是中国人!进行分词:

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"analyzer":"chinese","text":"我是中国人!"
}'
{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "<IDEOGRAPHIC>","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 1},{"token": "中","start_offset": 2,"end_offset": 3,"type": "<IDEOGRAPHIC>","position": 2},{"token": "国","start_offset": 3,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 3},{"token": "人","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}]
}

看的出对中文支持并不好,对中文分词一般不用es自带的分词器,可以使用第三方插件比如IK!

Fingerprint Analyzer

Fingerprint指纹分词器是一个特殊的分词器,它可以创建一个可用于重复检测的指纹。移除符号,转小写。

curl -L -X GET 'http://192.168.205.128:9200/_analyze' \
-H 'content-type: application/json' \
-d '{"analyzer":"fingerprint","text":"我是你大爷!"
}'
{"tokens": [{"token": "你 大 我 是 爷","start_offset": 0,"end_offset": 6,"type": "fingerprint","position": 0}]
}

其实上边ES内置的分词器对中文支持都不太好,目前常用的中文分词器都是使用第三方插件,例如IK分词器,不仅支持自定义词库还可以热更新词库。
另外还有一个是THULAC:(THU Lexical Analyzer for Chinese)它是由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。

当然ES也支持自定义分词器!

Elasticsearch 内置分词器相关推荐

  1. 二、ElasticSearch内置分词器

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

  2. Elasticsearch Analyzer 内置分词器

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

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

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

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

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

  5. Elasticsearch插件之分词器

    程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门 结合官网资料,做了更详细的实际使用总结. 从单机版安装到集群高可用生产环境搭建.基本概念(索引,分片,节点,倒排索引-).DS ...

  6. elasticsearch ik pingyin 分词器的安装和使用

    ES的核心就是搜索, 那么用ES不得不提到ES的搜索机制. 提搜索机制 就不得不提到 index的mapping 里的分词器 我们在搭建的过程中,默认通过 ip:9200/index 来创建一个索引. ...

  7. Elasticsearch的ik分词器安装和验证

    1.什么是分词器         把文本转换为一个个的单词,分词称之为analysis.es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体. 2.es内置分词器 standard ...

  8. ElasticSearch之ICU分词器

    分词器 分词器 接受一个字符串作为输入,将 这个字符串拆分成独立的词或 语汇单元(token) (可能会丢弃一些标点符号等字符),然后输出一个 语汇单元流(token stream) . 一个anal ...

  9. Elasticsearch之Analyzer分词器介绍

    Elasticsearch之Analyzer分词器介绍 Analysis Analyzer的组成 ES中内置的分词器 Analyzer的使用 几种分词器介绍 Standard Analyzer Sim ...

最新文章

  1. [arm 驱动]Linux输入子系统分析
  2. R语言统计与绘图:正态、方差齐性、多重比较
  3. 每次请求都要建立连接吗?
  4. 返回结果数据实体类R
  5. 【ArcGIS遇上Python】python批量获取栅格数据四至(top,bottom,left,right)坐标代码
  6. 牛客练习赛 58——树链剖分
  7. 讲讲你理解的服务治理
  8. loadrun Java 添加参数_loadrunner手动关联参数化问题总结
  9. 【Java】Java对象转换成Map
  10. 腾讯 Github 全球贡献前十;三星可折叠手机售价 1.6 万;OpenTitan 正式开源|极客头条...
  11. java 生成der_java – 我们如何将字符串从PEM转换为DER格式
  12. 一篇荡气回肠的统计思想漫谈——漫谈相关与回归
  13. C 实现Mysql增量备份_mysql增量备份 - lyle_luo的个人页面 - OSCHINA - 中文开源技术交流社区...
  14. 世上没有免费午餐:谈谈网络广告与节操
  15. C/C++抽红包系统
  16. 【码上实战】【立体匹配系列】经典SGM:(2)代价计算
  17. python运行代码不成功_命令行执行python模块时提示包找不到的问题
  18. JavaScript的运行机制,简单大白话讲解.
  19. win10系统配置GPU版本Pytorch
  20. fbx格式转gif_传奇战法道 角色人物武器3D模型动作 FBX unity格式

热门文章

  1. 韩国或将关闭虚拟货币交易所
  2. html5 网页课程设计(二)
  3. linux crontab 每7天,Linux下计划任务神器-Crontab
  4. 在Word里面,简单制作文档目录
  5. 10,python中tkinter模块里的鼠标点击事件
  6. 「GoCN酷Go推荐」Golang的Ealstic链接库
  7. Android 中替换开机动画(附动画包)
  8. Google Earth Engine———土地类型分类
  9. 苏宁“J-10%”抢下618开局,比主场虚名更重要的是什么?
  10. 10年计算机速度慢加固态硬盘行不行,电脑越来越慢?你的ssd固态硬盘分区弄好了吗...