带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(6)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(6)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(5) https://developer.aliyun.com/article/1229771



 配置项

 

pattern 匹配分隔符的正则表达式,默认是 \W+ 。

 

flags Java 中正则表达式匹配标记属性,多个标记属性使用 | 竖线分割。

 

GET _analyze
{
  "tokenizer": {
    "type": "pattern",
    "pattern":"(-\\d,)"
  },
  "text": "one-1,two-2,three-3"  #1
}
#Response
[ one, two, three-3 ]

#1 切分文本的分隔符为正则匹配到的连接符、数字和逗号。

 

Char Group Tokenizer

 

char_group 通过指定的字符集当作分隔符对文本内容进行切分,适用于简单切分的场景效率高于使用 pattern 正则匹配的方式。

GET _analyze
{
  "tokenizer": {
    "type": "char_group",
    "tokenize_on_chars": [
      "-"
    ]
  },
  "text": "a6cd-87b8-4356-932d-c4b13"
}
#Response
[ a6cd, 87b8, 4356, 932d, c4b13 ]

配置项

 

tokenize_on_chars 指定切分文本的分隔符列表,支持指定单个字符或以下字符组:

 

l letter 字符

l digit 数字

l whitespace 空格或换行符

l punctuation 标点符号

l symbol 标志符号

 

GET _analyze
{
  "tokenizer": {
    "type": "char_group",
    "tokenize_on_chars": [
      "whitespace",
      "-",
      ":"
    ]
  },
  "text": "Spider-Man: Far From Home "
}
#Response
[ Spider, Man, Far, From, Home ]


Path Tokenizer

 

path_hierarchy 对文件目录切分,根据路径分隔符将每一层目录都切分为一个单词。

GET _analyze
{
  "tokenizer": {
    "type": "path_hierarchy"
  },
  "text": "/home/data/readme.txt"
}
#Response
[ /home, /home/data, /home/data/readme.txt ]

配置项

 

delimiter 目录分隔符,默认 / 。

 

replacement 切分后的目录分隔符,和 delimiter 保持一致。

 

reverse 是否目录倒序从下往上输出,默认为 false。

 

skip 忽略目录数,默认为0,保留全部。


GET _analyze
{
  "tokenizer": {
    "type": "path_hierarchy",
    "delimiter":"/",
    "reverse":false,
    "replacement":"-"
  },
  "text": "one/two/three/read.txt"
}
#Response
[ one, one-two, one-two-three, one-two-three-read.txt ]

Token filter

 

ASCII folding token filter

 

asciifolding 会尝试将文本中的非英文字母,数字和符号转换为基本的 ASCII 字符(前127位),常用欧系和拉丁语言。

 

GET /_analyze
{
  "tokenizer" : "standard",
  "filter" : ["asciifolding"],
  "text" : "açaí à la carte"
}
#Response
[ acai, a, la, carte ]

转换原理可参考:http://svn.apache.org/repos/asf/lucene/java/tags/lucene_solr_4_5_1/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/ASCIIFoldingFilter.java

 

CJK bigram token filter

 

cjk_bigram 针对中文,日文和韩文字符处理,默认会按照二元语法由相邻两两文字组成为一个词语来处理。内置分词器 cjk 中包含这个过滤器。


GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    "cjk_bigram"
  ],
  "text": "一条测试文本"
}
#Response
[ 一条, 条测, 测试, 试文, 文本 ]

Conditional token filter

 

condition 通过编写 painless 脚本过滤符合条件的文本,只有满足条件的文本执行指定的过滤器。

 

GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "condition",
      "filter": [
        "reverse"                                    #1
      ],
      "script": {
        "source": "token.getTerm().length() < 4"    #2
      }
    }
  ],
  "text": "Hey,Also for search!"
}
#Response
[ yeH, Also, rof, search ]

#1 符合脚本设定条件的单词进行反转。

#2 当单词长度小于4的情况下执行过滤器。

script(必填)定义用于过滤单词的 painless 脚本,满足条件的单词会执行 filter 中定义的过滤器,其它不匹配的单词不进行任何处理。

 

Fingerprint token filter


fingerprint 过滤器会对文本内容生成一个指纹信息做为单词存储。生成过程包括以下三步:

 

1、切分后的单词按照字母排序

2、删除相同的单词

3、通过连接符将单词拼接为一个字符串


GET /_analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "fingerprint"
    }
  ],
  "text": "A good cook  could cook cookies?"
}
#Response
[ "A cook cookies could good" ]



《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(7) https://developer.aliyun.com/article/1229768

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
|
自然语言处理 API 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(12)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(12)
|
存储
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(9)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(9)
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)
|
存储 自然语言处理 算法
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(10)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(10)
104 0
|
存储 算法 Java
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(11)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(11)
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(1)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(1)
|
算法
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(8)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(8)
|
自然语言处理 API 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(2)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(2)
|
存储 自然语言处理
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(5)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(5)
129 0

热门文章

最新文章