ES实践笔记,elasticsearch分词器详解
作者:互联网
一,基本概念
Analysis,分词,是把全文本转换成一个个的单词的过程
anaylyzer,分词器,专门处理分词的组件,有三部分组成:
(1)Character filters,原始文本的预处理,通常完成HTML元素删除,替换指定字符等功能;
(2)Tokenizer,分词,按照预设的规则切分文本
(3)Token filter,切分后处理,例如大小写转换,删除停用词/stopwords,增加同义词
在上面的三部分中,tokenizer有且只有一个,character filters & token filters可以有多个或零个。
二,内置分词器
Elasticsearch内置的分词器:standard,simple,stop,whitespace,keyword,pattern,customer等。
这些分词器的对比见官网说明:
https://www.elastic.co/guide/en/elasticsearch/reference/master/analysis-analyzers.html
下表是个简单的概要
Tokenizer |
Token Filters |
Configuration |
|
Standard |
Lower case |
max_token_length |
基于语法的分词 |
Simple |
Lower case |
|
非字母的分词 |
Whitespace |
|
|
空格分词 |
Lower case |
Stop |
stopwords |
类似simple |
Keyword |
|
|
不'分词 |
Pattern |
Lower Case |
pattern |
按表达式分词 |
Language |
keyword marker |
|
其他语言分词 |
Standard |
lower case |
separator |
检查重复 |
三,自定义分词器
另外,非常常用的一种分词器是自定义分词器。可以自定义character filter,tokenizer和token filter来实现。通常实际工作中,需要根据自己的需要来实现自定义的分词器,这就需要把实际问题分解,之后分别在character filters或token filter中实现。
例如,我的日志中,有的命令格式如下:“component:;Django;es;Redis;”,:-D,那么自定义的分词器的核心要求是:
- 大小写转换,这个需要在token filter中实现
- 以分号分词,这个需要在tokenizeer实现
- ES就是elastic search,这个需要在token filter中实现
- 过滤冒号,这个在character filter中实现
自定义的分词器如下:
put my_index1 {
"settings": {
"analysis": {
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [": => "]
}
},
"filter": {
"my_synonym_filter": {
"type": "synonym",
"expand": true,
"synonyms": ["es => elasticsearch", ]
}
},
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer",
"char_filter": ["my_char_filter"],
"filter": ["my_synonym_filter", "lowercase"]
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": "\\;"
}
}
}
},
"mappings": {
"properties": {
"text": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
验证这个分词器:
GET my_index1/_analyze
{
"analyzer": "my_analyzer",
"text": "component:;es;Django;Redis"
}
结果如下,可以看到分词的结果满足了需求
标签:自定义,filter,stopwords,elasticsearch,分词器,my,分词,ES 来源: https://blog.csdn.net/davidchang365/article/details/98627584