文章目录
ElasticSearch文本分析(二)
分词器参考
分词器接收字符流,将其分解成单独的分词,并输出分词流。例如,空格分词器看到任何空格的时候,都会将文本分解成分词。它将会把"Quick brown fox!"
w文本分解成 [Quick, brown, fox!]
。
分词器还将负责记录一下内容:
- 每个术语的位置和顺序
- 在原文中开始和结束的偏移量
- 分词类型,生成的术语分类。例如
<ALPHANUM>
,<HANGUL>
, 或者<NUM>
。更简单的分词器只会产生word
分词类型
ElasticSearch内部有很多内置分词器,可以用于构建自定义分析器。
字符组分词器
每当遇到定义集中的字符时,char_group
分词器都会将文本分解为术语。
配置
char_group 标记器接受一个参数:
tokenize_on_chars |
一个包含用于标记字符串的字符列表。每当遇到这个列表中的字符时,就会启动一个新的分词。它可以接受单个字符,如-,或字符组:空格,字母,数字,标点,符号。 |
---|---|
max_token_length |
最大分词长度。如果一个分词超过了这个长度,那么将以max_token_length 间隔对其进行分割。默认为255。 |
例子
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'
{
"tokenizer": {
"type": "char_group",
"tokenize_on_chars": [
"whitespace",
"-",
"\n"
]
},
"text": "The QUICK brown-fox"
}
'
响应值:
{
"tokens": [
{
"token": "The",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "QUICK",
"start_offset": 4,
"end_offset": 9,
"type": "word",
"position": 1
},
{
"token": "brown",
"start_offset": 10,
"end_offset": 15,
"type": "word",
"position": 2
},
{
"token": "fox",
"start_offset":