《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/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