1. 首页
  2. elasticsearch教程

20-二十、Elasticsearch 教程: 分析 ( Analysis )

Analysis 很多文档都将它翻译为 分析,其实也是蛮有道理的,因为 Analysis 不仅有分词的过程,还要负责分析已分词的情况

其实从使用上看,翻译成分词更好,毕竟提起分词,大家都知道啥意思,但分析,谁能第一时间想到要先分词

搜索操作过程中处理查询时,任何索引中的内容均由分析模块进行分析

分析模块一般由分析器、标记器、tokenfilterscharfilters 组成

如果没有显式的定义任何分析器,那么 Elasticsearch 会使用相应的默认的内建分析器,这些默认的分析器由分析模块注册,包括分析器、令牌、过滤器和标记器

范例

例如下面这个请求,创建一个默认的图片索引


POST http://localhost:9200/pictures

请求正文


{ "settings": { "analysis": { "analyzer": { "index_analyzer": { "tokenizer": "standard", "filter": [ "standard", "my_delimiter", "lowercase", "stop", "asciifolding", "porter_stem" ] }, "search_analyzer": { "tokenizer": "standard", "filter": [ "standard", "lowercase", "stop", "asciifolding", "porter_stem" ] } }, "filter": { "my_delimiter": { "type": "word_delimiter", "generate_word_parts": true, "catenate_words": true, "catenate_numbers": true, "catenate_all": true, "split_on_case_change": true, "preserve_original": true, "split_on_numerics": true, "stem_english_possessive": true } } } } }

分析过程

分析 ( analysis ) 是这样一个过程:

1、首先,标记化一个文本块为适用于倒排索引单独的 (term)
2、然后标准化这些词为标准形式,提高它们的 「 可搜索性 」 和 「 查全率 」

这两个工作由 分析器 (analyzer) 完成的

一个分析器 (analyzer) 一般由下面三个功能组成:

1、字符过滤器

首先字符串经过字符过滤器( character filter ),它们的工作是在标记化前处理字符串

字符过滤器能够去除 HTML 标记,或者转换 "&" 为 "and"
2、分词器

下一步,分词器 (tokenizer) 被标记化成独立的词

一个简单的分词器 (tokenizer) 可以根据空格或逗号将单词分开

译者注:这个在中文中不适用
3、标记过滤

最后,每个词都通过所有标记过滤(token filters),它可以修改词(例如将 "Quick" 转为小写),去掉词( 例如停用词像 "a"、"and"、"the"等等),或者增加词( 例如同义词像 "jump" 和 "leap" )

Elasticsearch 提供很多开箱即用的字符过滤器,分词器和标记过滤器

这些可以组合来创建自定义的分析器以应对不同的需求

分析器

分词器由一个标记器和可选的标记过滤器组成

下表列出了 Elasticsearch 提供的大量的内置分词器,这些分词器在分析模块中使用逻辑名称进行注册,可以在映射定义中或在某些 API 中引用它们

分析器 逻辑名 说明
标准分词器 standard 可以自定义停止词(stopwords)和最大token长度(max_token_length)默认设置中,停止词为空,最大token长度为255
简单分词器 simple 该分词器使用了小写标记器(lowercasetokenizer)
空白分词器 whitespace 该非瓷器使用了空白标记器(whitespacetokenizer)
停止词分词器 stop 可以自定义停止词(stopwords)和停止词所在路径保存(stopwords_path)默认情况下,停止词使用了英文停止词(Englishstopwords),而停止词保存路径则是该英文停止词文件所在的路径
关键字分析器 keyword 该分析器将传递的所有参数内容视为一个单一标记,可以用于类似电话号码或邮政编码等
正则分析器 pattern 该分析器主要处理正则表达式。可以在此分析器中设置大小写敏感、模式、标志、停用词等
特定语言分析器 该分析仪处理诸如印地语,阿拉伯语,荷兰语等
雪球分析器 snowball 该分析器使用标准的分词器,并且组合使用了标准过滤器、小写过滤器、停止词过滤器和雪球过滤器
自定义分析器 custom 主要在用户需要自定义分析器时使用,由自定义分词器,可选的标记过滤器和可选的字符过滤器组成可以设置的选项有分词器(tokenizer),过滤器(filter),字符过滤器(char_filter)和position_increment_gap

分词器 ( Tokenizers )

分词器可以将一段分本分割为一个一个单词或词语

一个简单的分词器 ( tokenizer ) 可以根据空格或逗号将单词分开 ( 这个在中文中不适用 )

Elasticsearch 提供了有许多内置的分词器,我们也可用于自定义分词器

分词器 逻辑名 说明
标准分词器 standard 该分词器使用基于词的语法来分词,可配置的选项有max_token_length
edgeNGram分词器 edgeNGram 可以配置的选项有min_gram,max_gram,token_chars
关键字分词器 keyword 该分词器将一整块的输入数据作为一个单独的分词。可以配置的选项有buffer_size
字母分词器 letter 该分词器会将遇到非字母之前的所有字母视为一个词
小写分词器 lowercase 和字母分词器相同,但在获取到一个词后会将其中的大写字母转换为小写
NGram分词器 nGram 可配置的选项有min_gram(默认值1)、max_gram(默认值2)和token_chars
空白符分词器 whitespace 这个过滤器使用空白符划分文本
正则分词器 pattern 使用正则表达式作为分词分隔符,可以配置的选项有Pattern,flags和group
UAXEmailURLTokenizer uax_url_email 和标准分词器相同,但会把电子邮件和URL视为一个单独的词
层级路径分词器 path_hierarchy 该分词器会生成输入路径的所有可能路径可配置的选项有delimiter(默认/),replacement,buffer_size(默认1024),reverse(默认false)和skip(默认0)
经典分词器 classic 该分词器使用基于词的基本语法来分词。可配置的选项有max_token_length
泰语分词器 thai 使用内置的泰语分词算法对泰语进行分词

标记过滤器 ( token filters )

标记过滤可以修改词 ( 例如将 "Quick" 转为小写),去掉词( 例如停用词像 "a"、"and"、"the" 等等 ),或者增加词 ( 例如同义词像 "jump" 和 "leap" )

Elasticsearch 提供很多开箱即用的字符过滤器

字符过滤器

这些过滤器一般在分词器之前使用

字符过滤器查找特殊字符或 HTML 标记或指定模式,然后将其删除或更改为适当的单词,例如将 改成 and , 同时移除 html 标记标签

下面的代码是一个分析器的例子,synonym.txt 文件用于指定同义词


{ "settings":{ "index":{ "analysis":{ "analyzer":{ "synonym":{ "tokenizer":"whitespace", "filter":["synonym"] } }, "filter":{ "synonym":{ "type":"synonym", "synonyms_path":"synonym.txt", "ignore_case":"true" } } } } } }

希望读者能够给小编留言,也可以点击[此处扫下面二维码关注微信公众号](https://www.ycbbs.vip/?p=28 "此处扫下面二维码关注微信公众号")

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:20-二十、Elasticsearch 教程: 分析 ( Analysis )

    链接:https://www.javajike.com/article/1263.html

« 21-二十一、Elasticsearch 教程: 模块 ( Modules )
19-十九、Elasticsearch 教程: 映射 ( Mapping )»

相关推荐

QR code