ES 分词器

概述

分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具

什么是分词器

顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis
是通过分词器(Analyzer) 来实现的,可使用 ES 内置的分析器或者按需定制化分析器。

举一个分词简单的例子:比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。

在这里插入图片描述

分词器的构成

分词器是专门处理分词的组件,分词器由以下三部分组成:

character filter

接收原字符流,通过添加、删除或者替换操作改变原字符流

例如:去除文本中的html标签,或者将罗马数字转换成阿拉伯数字等。一个字符过滤器可以有零个或者多个

tokenizer

简单的说就是将一整段文本拆分成一个个的词。

例如拆分英文,通过空格能将句子拆分成一个个的词,但是对于中文来说,无法使用这种方式来实现。在一个分词器中,有且只有一个tokenizeer

token filters

将切分的单词添加、删除或者改变

例如将所有英文单词小写,或者将英文中的停词a删除等,在token filters中,不允许将token(分出的词)的position或者offset改变。同时,在一个分词器中,可以有零个或者多个token filters.

分词顺序
在这里插入图片描述
同时 Analyzer 三个部分也是有顺序的,从图中可以看出,从上到下依次经过 Character Filters,Tokenizer 以及 Token Filters,这个顺序比较好理解,一个文本进来肯定要先对文本数据进行处理,再去分词,最后对分词的结果进行过滤

索引和搜索分词

文本分词会发生在两个地方:

  • 创建索引:当索引文档字符类型为text时,在建立索引时将会对该字段进行分词。
  • 搜索:当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分词。

配置分词器

默认ES使用standard analyzer,如果默认的分词器无法符合你的要求,可以自己配置

分词器测试
可以通过_analyzerAPI来测试分词的效果。

COPY# 过滤html 标签
POST _analyze
{
   
   
    "tokenizer":"keyword", #原样输出
    "char_filter":["html_strip"], # 过滤html标签
    "text":"<b>hello world<b>"  # 输入的文本
}

在这里插入图片描述

指定分词器

使用地方

分词器的使用地方有两个:

  • 创建索引时
  • 进行搜索时

创建索引时指定分词器

如果手动设置了分词器,ES将按照下面顺序来确定使用哪个分词器:

  1. 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置
  2. 如果设置了analysis.analyzer.default,则使用该设置的分词器
  3. 如果上面两个都未设置,则使用默认的standard分词器

字段指定分词器

为title属性指定分词器

PUT my_index
{
   
   
  "mappings": {
   
   
    "properties": {
   
   
      "title":{
   
   
        "type":"text",
        "analyzer": "whitespace"
      }
    }
  }
}

指定默认default_seach

COPYPUT my_index
{
   
   
  "settings": {
   
   
    "analysis": {
   
   
      "analyzer": {
   
   
        "default":{
   
   
          "type":"simple"
        },
        "default_seach":{
   
   
          "type":"whitespace"
        }
      }
    }
  }
}

内置分词器

es在索引文档时,会通过各种类型 Analyzer 对text类型字段做分析,

不同的 Analyzer 会有不同的分词结果,内置的分词器有以下几种,基本上内置的 Analyzer 包括 Language Analyzers 在内,对中文的分词都不够友好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值