带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(2)

简介: 带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(2)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(1) https://developer.aliyun.com/article/1229776


Analyze API

 

Elasticsearch 提供了 _analyze API 用于查看分词器是如何解析文本内容的。如果需要为索引中的文本字段指定分词器,在创建前可以使用 _analyze 来测试分词器是否满足业务场景的需要。下面的例子使用 whitespace 分词器对字符串分词。


POST _analyze
{
  "analyzer": "whitespace", 
  "text": ["This is a test"]
}

响应结果就是文本经过分词器处理后的单词数组,除了返回每个单词外同时也包含了起始位置和单词在文本中的位置。

 

{
  "tokens" : [
    {
      "token" : "This",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "is",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "a",
      "start_offset" : 8,
      "end_offset" : 9,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "test",
      "start_offset" : 10,
      "end_offset" : 14,
      "type" : "word",
      "position" : 3
    }
  ]
}

API 中除了指定 analyzer 属性对 Elasticsearch 中现有的分词器进行测试外,也可以对分词器三个组成部分 Character filters,Tokenizer,Token filters 进行自定义组合配置,这在创建自定义分词器前非常有用。通过底层自定义过滤器组合测试需要注意和 analyzer 之间为互斥关系,两种分词方式只能选择一种。


POST _analyze
{
  "tokenizer": "standard", 
  "filter": ["lowercase"], 
  "text": [
    "This is a test"
  ]
}

使用了 standard 对文本进行切分,切分后结果转小写。

{
  "tokens" : [
{
      "token" : "this",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "is",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "a",
      "start_offset" : 9,
      "end_offset" : 10,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "test",
      "start_offset" : 11,
      "end_offset" : 15,
      "type" : "<ALPHANUM>",
      "position" : 3
    }
  ]
}

Analyze API 请求方式包括以下四种:


l GET /_analyze

l POST /_analyze

l GET //_analyze

l POST //_analyze

 

配置参数

 

index(非必填,字符串)对指定索引的分词器进行测试,通常配合 field 属性使用,实现指定字段的分词器测试。如果不指定 field 或 analyzer,则使用索引默认的分词器,如果索引没有指定默认分词器,将使用 standard 分词器。

 

analyzer(非必填,字符串)指定分词器对文本内容进行测试,不指定使用索引默认分词器,如果索引没有指定默认分词器,将使用 standard 分词器。如果同时指定了 field 属性,将使用 field 的分词器进行测试。

 

char_filter(非必填,字符串或字符串数组)配置字符过滤器,对源文本内容进行修改。相关配置在 Character filter 章节列出说明。

 

tokenizer(非必填,字符串)指定文本的切分方式。相关配置在 Tokenizer 章节列出说明。

 

filter(非必填,字符串或字符串数组)对切分后的单词数组进行标准化。相关配置在 Tokenfilter 章节列出说明。

 

field(非必填,字符串) 对索引中指定字段的分词器进行测试,需要指定索引才能使用此参数。如果该字段没有指定分词器将使用索引默认分词器,如果索引没有指定默认分词器,将使用standard 分词器。

 

text(必填)用于测试分词器的文本。

 

调用样例


指定分词器解析文本

 

使用 whitespace 分词器对文本进行分词测试,文本使用空格分割。


POST _analyze
{
   "analyzer": "whitespace",
   "text": ["This is a test"]
}
#Response
[ This, is, a, test ]

自定义组合分词器解析文本

 

指定了使用 standard 方式对文本进行切分,结果需要转换小写并使用默认 stop filter 对结果中停用词进行剔除。英文中默认的停用词包括(a,an,and,are)等,具体配置细节可以参考拆解分词器章节 Token filter 下 Stop token filter 的内容。停用词默认按照小写进行匹配,使用时需要注意 filter 是按照定义顺序依次执行,如果转换小写过滤器在停用词之后,就会遗漏大写的停用词。


POST _analyze
{
  "tokenizer": "standard",
  "filter": [
    "lowercase",
    "stop"
  ],
  "text": [
    "THIS is a TEST"
  ]
}
#Response
[ test ]

此时调换一下 filter 的顺序将stop filter 放在 lowercase filter 操作之前进行处理可以看到大写的 THIS 不会被剔除,而是转换为了小写保留。


 POST _analyze
{
  "tokenizer": "standard",
  "filter": [
    "stop",
    "lowercase"
  ],
  "text": [
    "THIS is a TEST"
  ]
}
#Resposne
[ this , test ]

组合分词器除了指定时过滤器或切分方式的名称外,同时也支持为 char_filter/tokenizer/filter 增加配置。下面的样例指定使用 standard 方式对文本进行切分,结果需要转换小写并且对停用词进行自定义设置。a is this test 四个单词作为停用词,当文本中出现以上四个单词时都将会被剔除。


POST _analyze
{
  "tokenizer": "standard",
  "filter": [
   "lowercase",        #1
    {
      "type": "stop",    #2
      "stopwords": [
        "a",
        "is",
        "this",
        "test"
      ]
    }
  ],
  "text": [
    "THIS is a TEST,Test Number is:1234"
  ]
}
#Response
[ number, 1234 ]

 #1 lowercase 小写转换过滤器使用默认配置,直接传递字符串。

#2 stop 停用词过滤器增加了停用词列表的配置,通过 { type:"过滤器名名称","配置属性":"值" } 格式增加配置项。

 

指定索引下分词器解析文本

 

使用 sample 索引的分词器对文本进行测试。如果索引没有设置分词器,将使用 standard 分词器。


PUT sample
{
  "mappings": {
"properties": {
      "content": {
        "type": "text",
        "analyzer": "keyword"
      }
    }
  }
}
# 默认使用 standard 分词器进行分词 
POST sample/_analyze
{ 
  "text" : "This is a test"
}
#Response
[ This, is, a, test ]

使用 sample 索引中 content 字段配置的分词器对文本进行测试。content 必须要存在,如果该字段没有指定分词器将使用索引默认分词器,如果索引没有指定默认分词器,将使用

standard 分词器。根据 mapping 中的定义,我们指定了 content 分词为 keyword 类型,文本内容将会作为整体返回。


POST sample/_analyze
{
  "field": "content",
  "text": "This is a test"
}
#Response
[ "This is a test" ]

拆解分词器

 

在写入阶段中我提到了分词器像“管道”,在这小节中我们来拆解分析下这个“管道”每一步都做了什么操作。大体上分词器包括以下三部分。

 

1、character filter 字符过滤器:对源文本内容进行修改,如替换字符,删除 HTML 标记。是分词器的第一步处理,一个分词其中可以包括多个字符过滤器。

2、tokenizer 字符切分方式:指定文本的切分方式。把接收到文本内容切分成一个个独立的单词,并返回切分后单词对象数组。分词器中只能指定一个切分方式。

3、token filter 单词过滤器:对切分后的单词数组进行标准化。使用不同的过滤器对数组进行增加、修改和删除的操作,分词器中可以包含多个单词过滤器。

 

Character filter

 

HTML strip character filter

 

html_strip 过滤器对文本中 HTML 标签处理。包括剔除 HTML 中的行级标签,\n 换行符替换块级标签,HTML 的转义字符将会转换为 HTML 标签。


POST _analyze
{
    "char_filter": ["html_strip"],                    #1
    "text": [
        "<a href='https://www.google.com'>google.com</a>",
        "<div>block-level element</div>",
        "&lt;p&gt;"
    ]
}



《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.4.Analyzers / Custom analyzers(3) https://developer.aliyun.com/article/1229774

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
存储 安全 Linux
Linux中的软RAID
Linux中的软RAID
274 2
|
Linux
Pytest----CentOS7安装配置allure
Pytest----CentOS7安装配置allure
1342 0
Pytest----CentOS7安装配置allure
|
机器学习/深度学习 数据采集 SQL
一文读懂大数据实时计算(一)
本文分为四个章节介绍实时计算,第一节介绍实时计算出现的原因及概念;第二节介绍实时计算的应用场景;第三节介绍实时计算常见的架构;第四节是实时数仓解决方案。
3226 0
一文读懂大数据实时计算(一)
|
存储 人工智能 安全
赋能数字化转型的创新引擎
阿里云是全球领先的云计算与人工智能科技公司,其强大的技术实力和丰富的解决方案正深刻影响企业运营与竞争力。依托坚实的云计算基础设施,阿里云提供弹性计算、存储与网络服务,满足多样化需求。在AI与大数据领域,机器学习平台PAI及MaxCompute助力智能决策与创新应用。同时,阿里云构建全方位安全防护体系,保障数据隐私,并通过活跃的开发者社区与生态合作推动行业进步。未来,阿里云将持续加大研发投入,优化云原生技术,深化AI与大数据研究,引领数字化转型潮流,共创美好未来。
赋能数字化转型的创新引擎
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek vs. ChatGPT:大语言模型的技术分野与应用边界全解析
DeepSeek更适合中文环境下对语言理解和生成准确性要求高、专业领域内容生成需求大,以及对成本敏感、实时性要求高和硬件资源有限的场景。ChatGPT则更适合需要处理多种语言,尤其是以英文等西方语言为主,以及对创意写作、开放域对话有需求,对成本和实时性要求不高且有强大硬件支持的场景。两款模型各有侧重,用户可根据具体需求选择最适合的工具。
|
机器学习/深度学习 人工智能 自然语言处理
ModelScope深度学习项目低代码开发
低代码开发平台通过丰富的预训练模型库、高度灵活的预训练模型和强大的微调训练功能,简化深度学习项目开发。以阿里魔搭为例,提供大量预训练模型,支持快速迭代与实时反馈,减少从头训练的时间和资源消耗。开发者可轻松调整模型参数,适应特定任务和数据集,提升模型性能。ModelScope平台进一步增强这些功能,提供模型搜索、体验、管理与部署、丰富的模型和数据资源、多模态任务推理及社区协作,助力高效、环保的AI开发。
773 65
|
前端开发 JavaScript 测试技术
如何制作网页
创建自己的网站涉及多个步骤,从确定主题到最终测试和发布。本文详细介绍了每个步骤:首先明确网站目的和受众;其次设计直观易用的布局;选择符合主题的颜色和字体;撰写清晰简洁的内容;优化加载速度;全面测试功能和兼容性;选择托管服务并注册域名;最后通过SEO、社交媒体和广告进行推广。注意事项包括关注用户体验、学习基本编码知识,并考虑网站的扩展性和可维护性。遵循这些步骤,你将能创建一个美观且实用的网站。
1483 0
|
12月前
企业微信批量加好友脚本,企业微信自动加手机号好友软件,自动同意群发消息自动回复
这是一款为企业微信设计的自动化营销工具,能够一键批量加好友并自动回复消息。通过模拟操作实现自动化流程,提升网络营销效率。
时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究
时间序列分析中,确定序列的平稳性至关重要。本文介绍如何使用KPSS检验和Dickey-Fuller检验验证序列平稳性。KPSS假设数据非平稳,而Dickey-Fuller假设数据平稳。通过构造平稳(白噪声)和非平稳(随机游走)序列并进行检验,展示了两种方法的应用。KPSS适用于检测围绕趋势的平稳性,Dickey-Fuller则用于检验单位根。建议同时使用两者以确保结论可靠。
779 4
时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。

热门文章

最新文章