跳到主要内容

使用分词器

分词 就是通过文本分析(Analysis)将文本转换成一系列单词(token)的过程。 例如,字符串 “the quick Brown Foxes” 可以被分析成这些单词:quickBrownfox。分析后的单词将被编制进字段的倒排索引,以便我们在大块文本中高效地搜索单个单词。

注意:索引里只有 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 FiltersTokenizerToken Filters组成,共同协助分词过程,这些过滤器可以组合起来为每个索引配置自定义分析器。

  • Character Filters:原始文本处理,比如去除 html 标签
  • Tokenizer:分词规则,比如按照空格切分
  • Token Filters:将切分的单词进行再加工,比如大写转小写,删除停用词,增加同义语等

Elasticsearch 内置的分词器

纳速云附加安装的分词器