在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本、在原始文本中的开始和结束偏移量、以及数据类型等组成。ElasticSearch 把文档数据写到倒排索引(Inverted Index)的结构中,倒排索引建立词(Term)和文档之间的映射,索引中的数据是面向词,而不是面向文档的。分析器(Analyzer)的作用就是分析(Analyse),用于把传入Lucene的文档数据转化为倒排索引,把文本处理成可被搜索的词。

在ElasticSearch引擎中,分析器的任务是分析(Analyze)文本数据,分析是分词,规范化文本的意思,其工作流程是:

1. 首先,字符过滤器对分析(analyzed)文本进行过滤和处理,例如从原始文本中移除HTML标记,根据字符映射替换文本等,

2. 过滤之后的文本被分词器接收,分词器把文本分割成标记流,也就是一个接一个的标记,

3.然后,标记过滤器对标记流进行过滤处理,例如,移除停用词,把词转换成其词干形式,把词转换成其同义词等,

4.最终,过滤之后的标记流被存储在倒排索引中;

5. ElasticSearch引擎在收到用户的查询请求时,会使用分析器对查询条件进行分析,根据分析的结构,重新构造查询,以搜索倒排索引,完成全文搜索请求。

无论是内置的分析器(analyzer),还是自定义的分析器(analyzer),都由三种构件块组成的:character filters,tokenizers和 token filters。

character filters

字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换该流。

举例来说,一个字符过滤器可以用来把阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩)‎转成成Arabic-Latin的等价物(0123456789)。

一个分析器可能有0个或多个字符过滤器,它们按顺序应用。

Tokenizer (分词器)

一个分词器接收一个字符流,并将其拆分成单个token (通常是单个单词),并输出一个token流。例如,一个whitespace分词器当它看到空白的时候就会将文本拆分成token。它会将文本“Quick brown fox!”转换为[Quick, brown, fox!]

(PS:Tokenizer 负责将文本拆分成单个token ,这里token就指的就是一个一个的单词。就是一段文本被分割成好几部分 )

分词器还负责记录每个term的顺序或位置,以及该term所表示的原单词的开始和结束字符偏移量。(PS:文本被分词后的输出是一个term数组)

一个分析器必须只能有一个分词器

Token filters (token过滤器)

token过滤器接收token流,并且可能会添加、删除或更改tokens。

例如,一个lowercase token filter可以将所有的token转成小写。stop token filter可以删除常用的单词,比如 the 。synonym token filter可以将同义词引入token流。

不允许token过滤器更改每个token的位置或字符偏移量。

一个分析器可能有0个或多个token过滤器,它们按顺序应用。

ES内置分词器(Tokenizer)

分词器在字符过滤器之后工作,用于把文本分割成多个标记(Token),一个标记基本上是词加上一些额外信息,分词器的处理结果是标记流,它是一个接一个的标记,准备被过滤器处理。标准分析器(Standard)

分析器类型是standard,由标准分词器(Standard Tokenizer),标准标记过滤器(Standard Token Filter),小写标记过滤器(Lower Case     Token Filter)和停用词标记过滤器(Stopwords Token Filter)组成。参数stopwords用于初始化停用词列表,默认是空的。

简单分析器(Simple)

分析器类型是simple,实际上是小写标记分词器(Lower Case Tokenizer),在非字母位置上分割文本,并把分词转换为小写形式,功能上是Letter Tokenizer和 Lower Case Token Filter的结合(Combination),但是性能更高,一次性完成两个任务。

空格分析器(Whitespace)

分析器类型是whitespace,实际上是空格分词器(Whitespace Tokenizer)。

停用词分析器(Stopwords)

分析器类型是stop,由小写分词器(Lower Case Tokenizer)和停用词标记过滤器(Stop Token Filter)构成,配置参数stopwords或    stopwords_path指定停用词列表。

雪球分析器(Snowball)

分析器类型是snowball,由标准分词器(Standard Tokenizer),标准过滤器(Standard Filter),小写过滤器(Lowercase Filter),停用词过滤器(Stop Filter)和雪球过滤器(Snowball Filter)构成。参数language用于指定语言。

自定义分析器

分析器类型是custom,允许用户定制分析器。参数tokenizer 用于指定分词器,filter用于指定过滤器,char_filter用于指定字符过滤器。

内置分析器实例

这里我们使用的工具是Kibana,我们在这里来操作一下Elasticsearch。如下的事例是ES默认的标准分析器,我们使用_analyze来调试实验一下。POST _analyze

{

"analyzer": "standard",

"text": "I am Chinese."

}

输出如下结果:{

"tokens" : [

{

"token" : "i",

"start_offset" : 0,

"end_offset" : 1,

"type" : "",

"position" : 0

},

{

"token" : "am",

"start_offset" : 2,

"end_offset" : 4,

"type" : "",

"position" : 1

},

{

"token" : "chinese",

"start_offset" : 5,

"end_offset" : 12,

"type" : "",

"position" : 2

}

]

}

而使用空格分析器的话,就会对每个空格进行分割,如下POST _analyze

{

"analyzer": "whitespace",

"text": "I'm Chinese."

}

输出结果:{

"tokens" : [

{

"token" : "I'm",

"start_offset" : 0,

"end_offset" : 3,

"type" : "word",

"position" : 0

},

{

"token" : "Chinese.",

"start_offset" : 4,

"end_offset" : 12,

"type" : "word",

"position" : 1

}

]

}

接下来我们创建一个自定义分析器:# 创建一个自定义分词器

PUT test_index_1

{

"settings": {

"analysis": {

"analyzer": {

"my_custom_anaylzer" : {

"type" : "custom",

"tokenizer" : "standard",

"char_filter" : ["html_strip"],

"filter" : ["lowercase"]

}

}

}

}

}

以上代码是创建一个自定义分析器,其中使用分析器是标准分析器,字符串过滤使用的是html_strip(去除里面的html标签内容),token过滤器用的是lowercase,也就是把取出来的字符都转成小写。运行如下事例。POST test_index_1/_analyze

{

"analyzer" : "my_custom_anaylzer",

"text" : "Is this a box ?"

}

输出结果为:{

"tokens" : [

{

"token" : "is",

"start_offset" : 0,

"end_offset" : 2,

"type" : "",

"position" : 0

},

{

"token" : "this",

"start_offset" : 3,

"end_offset" : 7,

"type" : "",

"position" : 1

},

{

"token" : "a",

"start_offset" : 12,

"end_offset" : 13,

"type" : "",

"position" : 2

},

{

"token" : "box",

"start_offset" : 14,

"end_offset" : 17,

"type" : "",

"position" : 3

}

]

}

参考

es过滤html标签,Elasticsearch 分词器相关推荐

  1. ElastIcSearch分词器

    ElastIcSearch分词器 Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer).Analys ...

  2. 2、Elasticsearch分词器简介与使用(一)

    一.分词器的概念 1.Analysis Phase 在文档(Document)被添加到反向索引(inverted index)之前,Elasticsearch 对文档正文执行的过程称为分析阶段(Ana ...

  3. ElasticSearch分词器(一)

    Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer).Analysis是通过Analyzer来实现的 ...

  4. 3. ElasticSearch分词器和聚合,数据的丰富和去重

    ElasticSearch分词器和聚合,数据的丰富和去重 1. analyzer 1.1. 什么是analysis? 1.2. 如何定义一个定制的分析器 1.3. 中文分词器 2. Aggregati ...

  5. elasticsearch分词器词库热更新三种方案

    文章目录 一.本地文件读取方式 二.远程扩展热更新 IK 分词 三.重写ik源码连接mysql 一.本地文件读取方式 首先进入elasticsearch目录的plugins目录下,查看目录结构 2.进 ...

  6. ES集群添加IK分词器

    ES集群添加IK分词器 ES : 7.5.0 官方文档其实已经够优秀了,毕竟是中文的,这里只给出一些建议. IKAnalyzer.cfg.xml 建议放到插件的目录下,要不然有可能会有一些问题 {pl ...

  7. 【ES】Elasticsearch分词器使用和简单查询

    文章目录 Elasticsearch 一. analysis与analyzer 1.1 内置的分词器 1.2 内置分词器示例 1.3 中文分词 1.3.1 IK分词器 1.3.2 HanLP 1.3. ...

  8. ElasticSearch 分词器

    分词器 分词就是将一段文本按照一定的规则切分成以一个一个的关键字的过程 简介 ElasticSearch的分词器(Analyzer)一般由三种组件构成: character filter 字符过滤器: ...

  9. 一、ElasticSearch分词器概念

    java学习讨论群:725562382 1.Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词.Analysis是通过 ...

最新文章

  1. CSS之布局(盒子模型--内边距)
  2. Genome Research | TransBorrow:通过借用不同拼接工具的拼接结果来引导完成转录组拼接
  3. list排序_「肘后备急码」- C#对象List排序
  4. ccf-csp #201909-2 小明种苹果(续)
  5. QT vs下x64编译变win32编译报错:C:\Users\ycy\AppData\Local\QtMsBuild\qtrcc.targets(69,5): error MSB3073:
  6. vue源码学习--vue源码学习入门
  7. POJ3264Balanced Lineup(线段树)
  8. 吴甘沙创业照见自动驾驶十年变迁,产业爆发在下一个春天里 | 自动驾驶这十年...
  9. UML基础与应用系列文章汇总
  10. Java FX swt_转: JAVA_SWT常用事件, 和方法
  11. java课程 教 学小结_Java私塾中级课程学习感受和小结3
  12. ISP 和摄像头基本知识
  13. 火狐浏览器 + 插件scrapbook 制作仿站工具
  14. [INSHack2019]Passthru
  15. Sony WH-1000XM3降级到2.00
  16. jquery append添加的元素用jquery无法获取到
  17. 医学院交换去计算机学院,2017年北京协和医学院阜外心血管病医院823计算机原理考研强化模拟题...
  18. **薛定谔名著《生命是什么》体会**
  19. windows读写linux文件,【转载】在Windows下使用Ext2Fsd极速读写Linux硬盘
  20. ppk和pem文件互转

热门文章

  1. ​ICML 2021 Long Oral | 顺序不可知的交叉熵函数
  2. 管中窥“视频”,“理解”一斑 —— 视频理解概览
  3. 预训练依旧强大:少样本条件下的任务导向型对话生成
  4. java实验3 2020.4.6
  5. 一篇文章入门深度学习框架PyTorch
  6. Show Attend and Tell的词表
  7. arm中断保护和恢复_ARM中断返回的详细分析
  8. html 画动画效果,html5 canvas绘制曲线动画特效
  9. 单片机c语言实验,单片机实验C语言编程.doc
  10. php 上传pdf文件损坏,php – 强制下载PDF文件,损坏文件