使用分词器
分词 就是通过文本分析(Analysis)将文本转换成一系列单词(token)的过程。
例如,字符串 “the quick Brown Foxes” 可以被分析成这些单词:quick
、Brown
、fox
。分析后的单词将被编制进字段的倒排索引,以便我们在大块文本中高效地搜索单个单词。
注意:索引里只有 text
字段具备分词功能,默认采用 standard-analyzer 标准分词器。
简单测试
GET _analyze
{
"analyzer" : "standard",
"text" : "this is a test"
}
分析多个文本
GET _analyze
{
"analyzer" : "standard",
"text" : ["this is a test", "the second text"]
}
过滤器处理
GET _analyze
{
"tokenizer" : "keyword",
"filter" : ["lowercase"],
"text" : "This is a test, baby"
}
- keyword tokenizer 将字符串视作一个整体不进行分词处理
- filter 将分词结果小写化
前置处理
GET _analyze
{
"tokenizer" : "keyword",
"filter" : ["lowercase"],
"char_filter" : ["html_strip"],
"text" : "this is a <b>test</b>"
}
- char_filter :
html_strip
将输入文本去除html标签
自定义tokenizer和filter
添加排除停用词的一个例子
GET _analyze
{
"tokenizer" : "whitespace",
"filter" : ["lowercase", {"type": "stop", "stopwords": ["a", "is", "this"]}],
"text" : "this is a test"
}
将返回唯一的单词 test
在指定的索引上分析
GET analyze_sample/_analyze
{
"text" : "this is a test"
}
上面将使用与analyze_sample索引关联的默认analyzer
对文本进行分析,也可以指定其他analyzer
进行测试。
GET analyze_sample/_analyze
{
"analyzer" : "whitespace",
"text" : "this is a test"
}
分词组件概念
如上,一个分词器Analyze
由以下几个组件 Character Filters
、Tokenizer
、Token Filters
组成,共同协助分词过程,这些过滤器可以组合起来为每个索引配置自定义分析器。
- Character Filters:原始文本处理,比如去除 html 标签
- Tokenizer:分词规则,比如按照空格切分
- Token Filters:将切分的单词进行再加工,比如大写转小写,删除停用词,增加同义语等
Elasticsearch 内置的分词器
- Standard Analyzer - 默认分词器,按词切分,小写处理
- Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
- Stop Analyzer - 小写处理,停用词过滤(the ,a,is)
- Whitespace Analyzer - 按照空格切分,不转小写
- Keyword Analyzer - 不分词,直接将输入当做输出
- Pattern Analyzer - 正则表达式,默认 \W+
- Language Analyzer - 提供了 30 多种常见语言的分词器
- Custom Analyzer - 自定义分词器
纳速云附加安装的分词器
- IK Analyzer - IK中文分词器