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

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

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



配置项

 

mappings 提供用于匹配字符映射键值对数组,每个元素格式为 key => value。 和 mappings_path 二选一。

 

mappings_path 指定键值对文件的保存路径。当键值对数量巨大时,Elasticsearch 支持把键值对保存为文件,通过指定文件路径加载。和 mappings 二选一。

 

1、文件需要保存在 Elasticsearch 安装目录中的 config 文件夹下,文件访问权限设置为

Elasticsearch 的运行用户 。

2、必须是UTF-8格式。

3、每组键值对单独一行保存。

 

创建 mapping.txt 存放映射字符,文件保存在 Elasitcsearch 安装目录中的 config 文件夹下。

 

mappings.txt 将 - 和 _ 映射为空字符串
- => 
_ =>
JSON
POST _analyze
{
  "char_filter": [
    {
      "type": "mapping",
      "mappings_path":"mappings.txt" 
    }
  ],
  "text": ["Spider-Man"]
}
#Response
{
  "tokens" : [
    {
      "token" : "SpiderMan",
      "start_offset" : 0,
      "end_offset" : 10,
      "type" : "word",
      "position" : 0
    }
  ]
}

Pattern replace character filter

 

pattern_replace 过滤器通过正则表达式把匹配到的字符进行替换,替换的字符中可以引用匹配的正则组。

 

POST _analyze
{
  "char_filter": [
    {
      "type": "pattern_replace",
      "pattern": "[^0-9]",            #1
      "replacement": ""                #2
    }
  ],
  "text": [
    "+86010 5842 3584",
    "010-56812546"
  ]
}

#1 匹配文本中的非数字。

#2 匹配到的内容使用空字符串替换,表示删除匹配到的内容。


#Response
{
  "tokens" : [
    {
      "token" : "8601058423584",
      "start_offset" : 1,
      "end_offset" : 16,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "01056812546",
      "start_offset" : 17,
      "end_offset" : 29,
          "type" : "word",
      "position" : 101
    }
  ]
}

配置项

 

pattern 用于匹配字符的正则表达式。

 

replacement 替换的目标字符串,可以引用正则表达式匹配到组。

 

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

 

正则表达式相关设置参考:

 

正则表达式组:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#appendReplacement-java.lang.StringBuffer-java.lang.String-

标记属性值:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#field.summary

 

Tokenizer

 

Standard Tokenizer

 

standard 是 Elasticsearch 中默认切分方式,基于 Unicode Text Segmentation 算法实现。在英文中主要根据非数字和字母符号进行切分,适用于大多数语言。

 

GET _analyze
{
  "tokenizer": "standard",
  "text": "Hey!How are you?"
}
#Response
[ Hey, How, are, you ]

配置项

 

max_token_length 分词后单词最大长度,超过将会被切分成多个,默认长度255。


GET _analyze
{
  "tokenizer": {
    "type": "standard",
    "max_token_length": 5
  },
  "text": "The sun is shining"
}
#Response
[ The, sun, is, shini, ng ]

Letter Tokenizer

 

letter 会把不是字母的字符当作分隔符对文本进行切分,此方式不包含配置项。


GET _analyze
{
  "tokenizer": "letter",
  "text": "support@elastic.co"
}
#Response
[ support, elastic, co ]

Lowercase Tokenizer

 

lowercase 和 letter 切分方式相同,把不是字母的字符当作分隔符对文本进行切分。同时会把切分后的单词转换小写。

GET _analyze
{
  "tokenizer": "letter",
  "text": "Support@Elastic.CO"
}
#Response
[ support, elastic, co ]

Whitespace Tokenizer

whitespace 使用文本中的空格进行切分。


GET _analyze
{
  "tokenizer": "whitespace",
  "text": "Heya You know,For search!"
}
#Response
[ Heya, You, know,For, sesarch! ]



《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

相关实践学习
使用阿里云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(5)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(5)
149 0
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(13)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(13)
|
存储 算法 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)
112 0
|
索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
|
算法
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(8)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(8)
|
存储 自然语言处理 算法
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(10)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(10)
121 0
|
自然语言处理 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)
|
自然语言处理 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)
104 0
|
存储
带你读《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(1)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(1)