8.2.3-elasticsearch内置分词器之keyword/pattern

2023-11-14

ES默认提供了八种内置的analyzer,针对不同的场景可以使用不同的analyzer;

1、keyword analyzer

1.1、keyword类型及分词效果

keyword analyzer视字符串为一个整体不进行分词处理

//测试keyword analyzer默认分词效果
//请求参数
POST _analyze
{
  "analyzer": "keyword",
  "text": "The aggregations framework helps provide aggregated data based on a search query"
}
//结果返回
{
  "tokens" : [
    {
      "token" : "The aggregations framework helps provide aggregated data based on a search query",
      "start_offset" : 0,
      "end_offset" : 80,
      "type" : "word",
      "position" : 0
    }
  ]
}

以上句子通过分词之后得到的词(term)为:
[The aggregations framework helps provide aggregated data based on a search query]

1.2、keyword analyzer的组成定义
序号 子构件 构件说明
1 Tokenizer keyword tokenizer

如果希望自定义一个与keyword类似的analyzer,只需要在在自定义analyzer时指定type为keyword,其它的可以按照需要进行配置(char filter/filter),如下示例:

//自定义kwyword analyzer
PUT custom_rebuild_keyword_analyzer_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuild_keyword_analyzer":{
          "tokenizer":"keyword",
          "filter":[]
        }
      }
    }
  }
}

2、pattern analyzer

2.1、pattern类型及分词效果

pattern analyzer使用正则表达式作为文本分词规则,注意对正则的转义处理,避免正则匹配到正则本身的字符串,默认正则为\W+(匹配非单词字符)

//测试pattern analyzer默认分词效果
//请求参数
POST _analyze
{
  "analyzer": "pattern",
  "text": "It's a nice day"
}
//结果返回
{
  "tokens" : [
    {
      "token" : "it",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "s",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "a",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "nice",
      "start_offset" : 7,
      "end_offset" : 11,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "day",
      "start_offset" : 12,
      "end_offset" : 15,
      "type" : "word",
      "position" : 4
    }
  ]
}

以上句子通过分词之后得到的词(term)为:
[it, s, a, nice, day]

2.2、pattern类型可配置参数
序号 参数 参数说明
1 pattern java正则表达式,默认为\W+
2 flags java正则当中的flags,flags应该以管道形式分割,如’CASE_INSENSITIVE
3 lowercase 分隔出的词(term)是否以小写形式表示,默认为true
4 stopwords 预定义的停用词,可以为0个或多个,例如_english_或数组类型值,默认值为_none_
5 stopwords_path 停用词文件路径

1)、以下示例正则匹配非单词字符与’_'字符,并将最后的词(term)转化为小写

//自定义邮件格式拆分analyzer
PUT custom_rebuild_pattern_email_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "email_analyzer":{
          "type":"pattern",
          "pattern":"\\W|_",
          "lowercase":true
        }
      }
    }
  }
}
//请求参数
POST custom_rebuild_pattern_email_index/_analyze
{
  "analyzer": "email_analyzer", 
  "text": "Ruyin_Zh@foo-bar.com"
}
//分词结果
{
  "tokens" : [
    {
      "token" : "ruyin",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "zh",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "foo",
      "start_offset" : 9,
      "end_offset" : 12,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "bar",
      "start_offset" : 13,
      "end_offset" : 16,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "com",
      "start_offset" : 17,
      "end_offset" : 20,
      "type" : "word",
      "position" : 4
    }
  ]
}

以上句子通过分词之后得到的词(term)为:
[ruyin, zh, foo, bar, com]

2)、驼峰格式分词

//自定义驼峰格式analyzer
PUT custom_rebuild_pattern_camel_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "camel": {
          "type": "pattern",
          "pattern": """([^\p{L}\d+]+)|(?<=\D)(?=\d)|(?<=\d)(?<=\D)|(?<=[\p{L}&&[^\p{Lu}]])(?=\p{Lu})|(?<=\p{Lu})(?=\p{Lu})(?=\p{Lu}[\p{L}&&[^\p{Lu}]])"""
        }
      }
    }
  }
}
//请求参数
POST custom_rebuild_pattern_camel_index/_analyze
{
  "analyzer": "camel",
  "text": "MooseX::FTPClass2_beta"
}
//分词结果
{
  "tokens" : [
    {
      "token" : "moose",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "x",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "ftp",
      "start_offset" : 8,
      "end_offset" : 11,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "class",
      "start_offset" : 11,
      "end_offset" : 16,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "2",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "word",
      "position" : 4
    },
    {
      "token" : "beta",
      "start_offset" : 18,
      "end_offset" : 22,
      "type" : "word",
      "position" : 5
    }
  ]
}

以上句子通过分词之后得到的词(term)为:
[moose, x, ftp, class, 2, beta]

以上正则表达式解释
  ([^\p{L}\d]+)                             # 剔除非数字或字符的字符,
| (?<=\D)(?=\d)                             # 或者 非数值字符后面跟数值,
| (?<=\d)(?=\D)                             # 或者 数值后面跟非数字字符,
| (?<=[ \p{L} && [^\p{Lu}]])(?=\p{Lu})      # 或者 小写字符后面跟着大写字符,
| (?<=\p{Lu})(?=\p{Lu}[\p{L}&&[^\p{Lu}]])   # 或者 大写字符后面跟大写字符且之后跟小写字符
2.3、pattern analyzer的组成定义
序号 子构件 构件说明
1 Tokenizer pattern tokenizer
2 Token Filters lowercase token filter,stop token filter(默认禁用)

如果希望自定义一个与pattern类似的analyzer,只需要在原定义中配置可配置参数即可,其它的可以完全照搬pattern的配置,如下示例:

//自定义analyzer
PUT custom_redefine_pattern_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_pattern":{
          "tokenizer":"split_on_non_word",
          "filter":["lowercase"]
        }
      },
      "tokenizer": {
        "split_on_non_word":{
          "type":"pattern",
          "pattern":"\\W+"
        }
      }
    }
  }
}

//请求参数
POST custom_redefine_pattern_index/_analyze
{
  "analyzer": "rebuilt_pattern",
  "text": "It's a nice day"
}
//分词结果
{
  "tokens" : [
    {
      "token" : "it",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "s",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "a",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "nice",
      "start_offset" : 7,
      "end_offset" : 11,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "day",
      "start_offset" : 12,
      "end_offset" : 15,
      "type" : "word",
      "position" : 4
    }
  ]
}

以上句子通过分词之后得到的词(term)为:
[it, s, a, nice, day]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8.2.3-elasticsearch内置分词器之keyword/pattern 的相关文章

随机推荐

  • Java8中Collectors的使用

    前言 基本类型的流没有这个用法 文章目录 averagingDouble averagingInt averagingLong collectingAndThen counting groupingBy groupingByConcurre
  • IRQ和FIQ中断的区别

    FIQ和IRQ是两种不同类型的中断 ARM为了支持这两种不同的中断 提供了对应的叫做FIQ和IRQ处理器模式 ARM有7种处理模式 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ 所以一个中断是可以指定为FIQ或
  • Mac下如何降级Java、卸载Java

    前言 安装一些组件或插件时 有时会提示错误 What went wrong Could not determine java version from 11 查看组件或插件对应的Java版本会发现 可能只支持 Java 8 但本地安装的Ja
  • 《网络安全》零基础教程-适合小白科普

    网络安全 零基础教程 目录 目录 网络安全 零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒 蠕虫 木马 后门 DoS DDoS攻击 SQL注入 X
  • Java入门项目——读书管理系统

    Java简单实现读书管理系统 一 前言 二 思路及整体框架 三 代码展示 1 有关读书包 Book 2 有关用户包 3 有关操作书的包 一 前言 相信有很多小伙伴学习完了 JavaSE 基础语法 想知道自己到底学的怎么样 或则学完不知道这么
  • 使用RT-Thread studio 把LVGL移植到RT-Thread 上

    使用RT Thread studio 移植 LVGL到RT Thread中 其实RT Thread 移植LVGL 官方已经出来很多教程 但是但是他出的教程都是基于一些他们适配的BSP 但是其他不适配的怎么办呢 当然是手搓了 前期准备 1 在
  • 深入理解Golang之Map

    目录 写在前面 哈希表 如何解决哈希冲突的问题 1 链表地址法 2 开放地址法 开放地址 线性探测法 开放地址 平方探测法 开放地址 双哈希 Go Map实现 map数据结构 map的结构体为hmap bmap结构体 map的桶 Map扩容
  • 【使用JMeter 对Web服务器压力测试】

    自己使用JMeter测试百度心得 主要用到了 1 添加线程组 一个测试的线程容器 可设置线程个数 循环次数 所有线程启动一次的周期时间 2 在线程组 中添加sample gt http request 一个请求的范式 可以设置请求的url和
  • 关于单个模型切片

    这几天鼓捣了模型切片 遇到好多坑 特此记录 1 切片切什么 切的是模型 模型可以通过Nodevisitor转换为geode 而geode可以分为若干drawable 切的就是这些drawable 因此 要node gt accept vis
  • APP更新机制-静默更新、弱更新、强更新/portal是什么?

    APP更新机制 静默更新 弱更新 强更新 一 静默更新 1 1 功能解释 静默更新就是手机系统悄悄的更新 一般会是用户在应用市场勾选了Wifi状态下 闲时自动更新功能后 手机系统会按它的规则帮用户自动更新APP 这个功能和用户手动去应用市场
  • vue 校验表单报错:model is required for validate to wor

    参考https blog csdn net qq 45376290 article details 107346110 1 属性绑定错误 确保绑定的是 model 而不是v model model 是element ui 里面的一个 属性
  • 压缩感知 热身实验 OMP算法Python实现(详细代码注释)

    压缩感知实验 OMP算法Python实现 一维图信号重建 Experiment Result 一维图信号重建 coding utf 8 Created on Wed Sep 23 21 46 43 2020 author chen impo
  • GetLastError返回值及其含义

    GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置 函数并无必要设置上一次错误信息 所以即使一次GetLastError调用返回的是零值 也不能担保函数已成功执行 只有在函数调用
  • dhcp和vrrp技术

    目录 引言 一 DHCP工作原理与配置 1 DHCP 动态主机配置协议 2 DHCP工作原理 3 dhcp配置 同网段 4 dhcp中继 不同同网段 5 例子 二 vrrp作用配置 1 vrrp作用 2 vrrp配置 总结 引言 我们每台电
  • Android系统裁剪:手把手教你如何进行系统裁剪

    内容有点长 想系统裁剪 这篇文章足矣 看完会对系统裁剪及系统有更深的认识 前言 android系统裁剪优化一直是各个厂商定制产品的关键步骤 包括浅层次的去除不必要的apk android apk裁剪定制 和深层次的裁剪整个编译系统和框架层
  • 跨境外贸必看

    Pinterest是一个海外图片社交分享网站 Pinterest与国内小红书的营销方式非常相似 它允许我们定位特定的人群 兴趣甚至位置 借助庞大的用户群体和针对特定受众的能力 它成为外贸与跨境电商的推广营销利器 越来越多的跨境玩家利用它进行
  • 虚拟机opnsense作为dhcp服务器,在OPNsense中,通过主机名或域名访问内部设备

    在局域网环境中 使用域名来访问防火墙或其他设备比使用IP地址更容易让人使用 根据需要 我们可以只使用主机名 服务器 来访问设备上的各种服务 例如文件共享 它比包含域名的名称要短 如果打算运行Web服务器或运行具有Web界面的软件 则可能需要
  • Faster RCNN训练自己的数据集【傻瓜式教程】

    一 下载源码 本文采用的源码是 https github com dBeker Faster RCNN TensorFlow Python3 二 配置环境 由于本文是小白教程 光写几个环境怕有人配置不好或者配置版本搞乱 Faster RCN
  • ELK之Elasticsearch常用DSL语句(kibana语句)

    DSL 是什么 DSL Domain Specific Language 的缩写 中文翻译为领域特定语言 Wikipedia 对于 DSL 的定义还是比较简单的 A specialized computer language designe
  • 8.2.3-elasticsearch内置分词器之keyword/pattern

    ES默认提供了八种内置的analyzer 针对不同的场景可以使用不同的analyzer 1 keyword analyzer 1 1 keyword类型及分词效果 keyword analyzer视字符串为一个整体不进行分词处理 测试key