ElasticSearch—分析器

本文详细介绍了Elasticsearch中的分析器组成部分,包括字符过滤、分词器、分词过滤器及分词索引的工作原理。探讨了不同类型的内置分析器如标准、简单、空白、停用词、关键词、模式、语言、雪球分析器的特点,以及各种分词器和分词过滤器的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析器组成部分

  • 字符过滤

    • 使用字符过滤器将特定字符转变为其他字符序列,例如可以将&转为and

  • 分词器

    • 根据空格,换行等符号将文本切分为一个个单词

  • 分词过滤器

    • 对每个分词使用分词过滤器,将分词进行修改,添加或删除,例如常用的小写分词过滤器

  • 分词索引

    • 分词经历了分词过滤器就会被发送到Lucene进行文档的索引

使用分析器的方式

  • 创建索引时,为特定的索引进行设置分析器

  • ES配置文件中设置全局分析器

  • 在mapping中为某个字段指定分析器

内置分析器

  • 标准分析器(standard analyzer):文本默认分析器,包括标准分词器,标准分词过滤器,小写转换分词过滤器和停用词分词过滤器

  • 简单分析器(simple analyzer):用了小写转换分词器,在非字母处分词并自动转为小写,仅适用欧洲语言

  • 空白分析器(whitespace analyzer):根据空白将文档切分为分词

  • 停用词分析器(stop analyzer):在分词流中过滤了停用词

  • 关键词分析器(keyword analyzer):将整个字段当做一个单独的分词,建议将index指定为not_analyzed,而不在映射中使用关键词分析器

  • 模式分析器(pattern analyzer):允许指定一个分词切分的模式,建议使用定制分析器组合模式分词器

  • 语言和多语言分析器:指定使用特定的语言分析器

  • 雪球分析器(snowball analyzer):在标准分析器的基础上还使用了雪球词干器对文本进行词干提取

分词器

  • 标准分词器(standard tokenizer)

    • 适合大多数欧洲语言,也处理了Unicode文本切分,但分词默认最大长度255,同时移除了逗号句号标点符号

  • 关键词分词器(keyword tokenizer)

    • 将整个文本作为单个分词提供给分词过滤器,即不做任何分词操作

  • 字母分词器(letter tokenizer)

    • 根据非字母符号将文本切分为分词

  • 小写分词器(lowercase tokenizer)

    • 结合了字母分词器和小写分词过滤器行为

  • 空白分词器(whitespace tokenizer)

    • 根据空白将文档切分成分词

  • 模式分词器(pattern tokenizer)

    • 指定任意一个模式将文本切分为分词

  • NAX URL电子邮件分词器(uax_url_email tokenizer)

    • 主要针对邮件地址

  • 路径层次分词器(path tokenizer)

    • 共享路径的文件被作为结果返回

分词过滤器

  • 标准分词过滤器(standard token filter)

    • 其实未做任何实质的操作

  • 小写分词过滤器(lowercase token filter)

    • 将任何经过的分词转换为小写

  • 长度分词过滤器(length token filter)

    • 将超出最短和最长范围的单词过滤掉

  • 停用词分词过滤器(stop token filter)

    • 将停用词从分词流中移除

  • 截断分词过滤器(truncate token filter)

    • 允许配置length参数,截断超过一定长度的分词,默认截断超过10个字符部分

  • 修剪分词过滤器(trim token filter)

    • 删除一个分词中所有空白部分

  • 限制分词数量分词过滤器(limit token count token filter)

    • 限制字段可包含分词的最大数量,只有范围内的分词才会本索引,默认是1

  • 颠倒分词过滤器(reverse token filter)

    • 颠倒每个分词

  • 唯一分词过滤器(unique token filter)

    • 值保留第一个匹配分词的元数据,其他重复的被删除

  • ASCII折叠分词过滤器(asciifolding token filter)

    • 将不是普通ASCII字符的Unicode转换为ASCII中对应的字符

  • 同义词分词过滤器(synonyms token filter)

    • 使用关键词的同义词取代原始分词

  • N元语法、侧边N元语法和滑动窗口

    • N元语法(按照N切分)

      • 设置min_gram: 生成的最小N元语法

      • 设置max_gram: 生成的最大N元语法

    • 侧边N元语法

      • 是N元语法的变种,从左端开始按照设置值匹配,例如"hello",设置值分别为2,4,会得到he,hel,hell三个分词

    • 滑动窗口分词过滤器

      • 根据分词按照设置分词,例如"foo bar baz"设置为2,3,会得到foo bar,bar baz, foo bar baz,但结果其实是包含单个分词的,因为shingles分词过滤器作用后会和原始分词器产生的分词合并,可以通过output_unigrams为false解决这个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值