Word Oriented Tokenizers
下面的tokenizer主要用来切分文本为单个单词。
Standard Tokenizer
- 默认的analyzer,适合大多数语言。
- 根据
Unicode Text Segmentation
算法的定义,将文本切分成词元。 - 示例
POST _analyze
{
"tokenizer": "standard",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
产生[ The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone ]
。
- 配置参数
参数 | 说明 |
---|---|
max_token_length | 词元的长度,超过会被分割。默认255。 |
示例
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "standard",
"max_token_length": 5
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
产生[ The, 2, QUICK, Brown, Foxes, jumpe, d, over, the, lazy, dog's, bone ]
。
Letter Tokenizer
- 按非字母的切分。
- 示例
POST _analyze
{
"tokenizer": "letter",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
产生[ The, QUICK, Brown, Foxes, jumped, over, the, lazy, dog, s, bone ]
。
Lowercase Tokenizer
- 相当于
letter tokenizer
+lowercase token filter
。 - 示例
POST _analyze
{
"tokenizer": "lowercase",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
产生[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
。
Whitespace Tokenizer
- 按空格切分。
- 示例
POST _analyze
{
"tokenizer": "whitespace",
"text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
- 配置参数
参数 | 说明 |
---|---|
max_token_length | 词元的长度,超过会被分割。默认255。 |
UAX URL Email Tokenizer
- 类似
standard tokenizer
,只是能够识别邮件地址、URL。 - 示例
POST _analyze
{
"tokenizer": "uax_url_email",
"text": "Email me at [email protected]"
}
产生[ Email, me, at, [email protected] ]
。
如果是standard tokenizer
将产生[ Email, me, at, john.smith, global, international.com ]
。
- 配置参数
参数 | 说明 |
---|---|
max_token_length | 词元的长度,超过会被分割。默认255。 |
示例
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer":{
"type": "uax_url_email",
"max_token_length": 5
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "[email protected]"
}
产生[ john, smith, globa, l, inter, natio, nal.c, om ]
。
Partial Word Tokenizers
这些Tokenizer主要将单词或者文本截取成更小的分段。
N-Gram Tokenizer
指定保留的字符类型(通过参数
token_chars
指定,默认[]
保留所有),以及根据min_gram
以及max_gram
指定切分时最小几个字符、最大几个字符。像一个滑动窗口,例如
min_gram
为1,max_gram
为3,对于Quick
这个单词,就会变成[ Q, Qu, Qui, u, ui, uic, i, ic, ick, c, ck, k ]
。长度越短,切分出来越少,更多的被匹配到质量也越差;长度越长,切分出来越多,匹配越精确。示例
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
}
产生[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
。
- 配置参数
参数 | 说明 |
---|---|
min_gram | 字符的最小长度。默认为1。 |
max_gram | 字符的最大长度。默认为2。 |
token_chars | 字符组见下表。分词时,保留指定的字符组,并根据没有指定的字符组进行切分。例如指定了letter、digit字符组,就会根据whitespace、punctuation、symbol进行切分。 |
字符组 | 说明 |
---|---|
letter | 例如 a, b, ï or 京 |
digit | 例如 3 or 7 |
whitespace | 例如 " " or "\n" |
punctuation | 例如 ! or " |
symbol | 例如 $ or √ |
示例:保留数字,最小长度是1,最大是3。
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer":{
"type": "ngram",
"min_gram": 1,
"max_gram": 3,
"token_chars": [
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
产生[ 2 ]
。
示例:保留数字和字母,最小最大长度都是3。因为数字2长度为1,小于3,所以结果中没有数字,只剩下字母。
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
产生[ Qui, uic, ick, Fox, oxe, xes ]
。
Edge N-Gram Tokenizer
- 与
ngram tokenizer
相同,只不过只从单词头开始。例如,min_gram
为1,max_gram
为3,对于Quick
这个单词,就会变成[ Q, Qu, Qui ]
。 - 示例
默认配置:token_chars
默认为[]
保留全部,不拆分也就是Quick Fox
作为一整个单词,min_gram
为1,max_gram
为2
POST _analyze
{
"tokenizer": "edge_ngram",
"text": "Quick Fox"
}
产生[ Q, Qu ]
。
配置示例
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
产生[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]
Structured Text Tokenizers
适用于结构化文本(例如邮箱、身份证等)
Keyword Tokenizer
- 原模原样不变。
- 示例
POST _analyze
{
"tokenizer": "keyword",
"text": "New York"
}
产生[ New York ]
。
- 配置参数
参数 | 说明 |
---|---|
buffer_size | 缓冲区大小。默认256。 |
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer":{
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "keyword",
"buffer_size": 2
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "New York"
}
产生[ New York ]
。
Pattern Tokenizer
可以按照正则表达式切分,也可以按照正则表达式提取。
示例
POST _analyze
{
"tokenizer": "pattern",
"text": "The foo_bar_size's default is 5."
}
产生[ The, foo_bar_size, s, default, is, 5 ]
。
- 配置参数
参数 | 说明 |
---|---|
pattern | 使用Java正则表达式。默认\W+ 。 |
flags | Java正则表达式flags,多个用| 分离,例如"CASE_INSENSITIVE | COMMENTS"。 |
group | 将哪个捕获分组作为词元。默认是 -1,相当于split。 |
Char Group Tokenizer
- 根据定义的字符切分。
- 配置参数
参数 | 说明 |
---|---|
tokenize_on_chars | 用来切分的字符。可以使用单个例如- ,也可以使用字符组:whitespace ,letter , digit , punctuation , symbol 。 |
POST _analyze
{
"tokenizer": {
"type": "char_group",
"tokenize_on_chars": [
"whitespace",
"-"
]
},
"text": "The QUICK brown-fox"
}
产生[ The, QUICK, brown, fox ]
Simple Pattern Tokenizer
- 使用Lucene regular expressions捕获文本,比
pattern tokenizer
受限(pattern tokenizer
既可以捕获又可以切分),但是更快。 - 配置参数
参数 | 说明 |
---|---|
pattern | 使用Lucene regular expressions。默认空字符串,不捕获,输出空条件。 |
POST _analyze
{
"tokenizer": {
"type": "simple_pattern",
"pattern": "[0123456789]{2}"
},
"text": "fd-786-335-514-x"
}
产生[ 78, 33, 51 ]
Simple Pattern Split Tokenizer
- 使用Lucene regular expressions切分文本,比
pattern tokenizer
受限(pattern tokenizer
既可以捕获又可以切分),但是更快。 - 配置参数
参数 | 说明 |
---|---|
pattern | 使用Lucene regular expressions。默认空字符串,不切分,整条输出。 |
POST _analyze
{
"tokenizer": {
"type": "simple_pattern_split",
"pattern": "_"
},
"text": "an_underscored_phrase"
}
产生[ an, underscored, phrase ]
。
Path Tokenizer
- 切分类似文件系统路径的值。
- 示例
POST _analyze
{
"tokenizer": "path_hierarchy",
"text": "/one/two/three"
}
产生[ /one, /one/two, /one/two/three ]
。
- 配置参数
参数 | 说明 |
---|---|
delimiter | 路径分隔符。默认/ |
replacement | 分割后用来替换的分隔符。默认与delimiter 一致。 |
buffer_size | 缓冲大小。默认1024 。 |
reverse | true 则从相反顺序切分。默认fasle 。例如,one/two/three 默认情况下切分为[ one, one/two, one/two/three ] ,设为true ,则结果为[ one/two/three, two/three, three ] |
skip | 跳过多少个。默认0 |
POST _analyze
{
"tokenizer": {
"type": "path_hierarchy",
"delimiter": "-",
"replacement": "/",
"skip": 2
},
"text": "one-two-three-four-five"
}
产生[ /three, /three/four, /three/four/five ]
。
设置reverse
为true
,产生[ one/two/three/, two/three/, three/ ]
。