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

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


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



内置分词器

 

Elasticsearch 内置了一系列的分词器,目的是开箱即用。如果对内置分词器修改默认的配置,需要在索引中创建该类型的分词器用于修改配置项。下面代码为将 standard 增加了单词长度限制,每个单词按照3位进行切分。


PUT analyzer_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_override": {
          "type": "standard",
          "max_token_length": 3,
          "stopwords":"_english_"
        }
      }
    }
  }
}

 Standard Analyzer

 

默认分词器,不指定分词器的情况下都是使用 standard 分词器解析文本。按照 Unicode 文本分割算法对文本进行切分,如中文会切分每一个字,英文按照空格切分。处理时会把标点符号剔除,并转小写处理。适用于大多数语言。


POST _analyze
{
  "analyzer": "standard",
  "text": [
    "Heya, we are Elastic."
  ]
}

standard 处理后会返回下面的字符数组:


[ heya, we, are, elastic ]

内部实现

 

l Tokenizer

l Standard Tokenizer

 

l Token Filters

l Lower Case Token Filter

l Stop Token Filter (默认禁用)

 

配置参数

 

max_token_length 分词后单词最大长度,超过将会被切分成多个,默认长度255。

 

stopwords 配置停用词,可以根据内置语言设置如 english 或者定义停用词数组,默认不启用 _none_。

 

stopwords_path 配置停用词的文件路径,需要放在 Elasticsearch 目录中的 config 目录中。


PUT analyzer_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_override": {
          "type": "standard",
          "stopwords": "_english_"
        }
      }
    }
  }
}
GET analyzer_test/_analyze
{
  "analyzer": "standard_override",
  "text": ["Heya, we Are Elastic."]
}

为 standard 配置预定义英语停用词,处理后返回:


[ heya, we, elastic ]

Simple Analyzer

 

simple 分词器根据非字符进行切分,如数字,符号,空格等。处理后会将单词修改为小写,此分词器不包含配置参数。


POST _analyze
{
  "analyzer": "simple",
  "text": [
    "Heya, we Are Elastic.You know, 4 Search"
  ]
}

内部实现

 

l Tokenizer

l Lowercase Tokenizer

 

Whitespace Analyzer

 

whitespace 分词器根据空格进行单词切分,此分词器不包含配置参数。


POST _analyze
{
  "analyzer": "whitespace",
  "text": [
    "Heya, we Are Elastic.You know 4 Search"
  ]
}

内部实现

 

l Tokenizer

l Whitespace Tokenizer

 

Stop Analyzer

 

stop 分词器根据空格进行单词切分,切分后移除停用词。默认使用 _english_ 停用词。

 

POST _analyze
{
  "analyzer": "stop",
  "text": [
    "Heya, we Are Elastic.You know 4 Search"
  ]
}


内部实现

 

l Tokenizer

l Lowercase Tokenizer

 

l Token filters

l Stop Token Filter

 

配置参数

 

stopwords 配置停用词,可以根据内置语言设置如 _english_ 或者定义停用词数组,默认不启用 _none_。

 

stopwords_path 配置停用词的文件路径,需要放在 Elasticsearch 目录中的 config 目录中。


PUT analyzer_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "stop_override": {
          "type": "stop",
          "stopwords": ["heya","are","is","am","be"]
        }
      }
    }
  }
}
GET analyzer_test/_analyze
{
  "analyzer": "stop_override",
  "text": ["Heya, we Are Elastic."]
}


分词器中设置自定义停用词列表,包含 ["heya","are","is","am","be"] 在内的词都将会被忽略。处理后返回下面的单词数组:

 

[ we, elastic ]

Keyword analyzer

 

keyword 分词器将文本整体当做一个单词进行存储,不会进行切分。此分词器不包含配置参数。


POST _analyze
{
  "analyzer": "keyword",
  "text": [
    "Heya, we Are Elastic.You know for Search"
  ]
}

内部实现

 

l Tokenizer

l Keyword Tokenizer


Language analyzers

 

Elasticsearch 中和语言相关的分词器除了默认的英文外,同时也对对特定语言提供分析,目前包括:arabic,armenian,basque,bengali,brazilian,bulgarian,catalan,cjk,czech,danish,dutch,english,estonian,finnish,french,galician,german,greek,hindi,hungarian,indonesian,irish,italian,latvian,lithuanian,norwegian,persian,

portuguese,romanian,russian,sorani,spanish,swedish,turkish,thai。


GET _analyze
{
  "analyzer": "english", 
  "text":"Heya,We're Elastic. You know,for search"
}

配置参数

 

l 停用词内置多语种语言停用词可参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/analysis-stop-tokenfilter.html#analysis-stop-tokenfilter-stop-words-by-lang

stopwords 配置停用词,可以根据内置语言设置如 _english_ 或者定义停用词数组,默认不启用 _none_。

stopwords_path 配置停用词的文件路径,需要放在 Elasticsearch 目录中的 config 目录中。

l 排除词干提取单词列表 stem_exclusion 字符串数组内的单词不进行词干提取,字符串需要小写。


PUT language_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "english_override": {
    753         >   三、产品能力
          "type": "english",
           "stem_exclusion":["doing"],
           "stopwords":["what","where","when","are","the","you"]
        }
      }
    }
  }
}
GET language_example/_analyze
{
  "analyzer": "english_override",
  "text":"What are you doing when the phone ringing"
}

分词器中指定 doing 不做词干提取,同时指定了停用词。结果返回:

[ doing, phone, ring ]

中日韩语分词器

 

Elasticsearch 内置语言分词器对中日韩文处理使用的 cjk,对字符切分采用的是 bigram 二元语法由相邻两两文字组成为一个词语来处理。


GET _analyze
{
  "analyzer": "cjk", 
  "text":"这是一条测试文本"
}

 处理后的得到下面的字符串数组,可以看到二元语法没有分辨词的边界和语义化,仅将文字两两切分。对于真正场景的使用,更建议安装第三方语言分词器插件。


[ 这是,是一,一条,条测,测试,试文,文本 ]

内部实现

 

l Tokenizer

l Standard Tokenizer

 

l Token filters

l CJK width token filter

l Lowercase token filter

l CJK bigram token filter

l Stop token filter

 


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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
8月前
|
存储 机器学习/深度学习 数据可视化
结合多模态RAG和异步调用实现大模型内容
文章探讨了如何利用多模态大模型和工程优化手段提升物流理赔业务效率。核心方案包括:通过多模态RAG技术实现图片查重,结合异步调用方法优化货损识别功能。
485 36
结合多模态RAG和异步调用实现大模型内容
|
开发工具 git
github上的版本和本地版本冲突的解决方法
github上的版本和本地版本冲突的解决方法
337 0
|
消息中间件 Java Kafka
Spring 事务的独门绝技:钩子函数的使用技巧
经过前面对Spring AOP、事务的总结,我们已经对它们有了一个比较感性的认知了。今天,我继续安利一个独门绝技:Spring 事务的钩子函数。单纯的讲技术可能比较枯燥乏味。接下来,我将以一个实际的案例来描述Spring事务钩子函数的正确使用姿势。
Spring 事务的独门绝技:钩子函数的使用技巧
|
运维 监控 安全
【ELK入门】Elastic中文社区运维监控实战之架构篇
阿里云MVP曾勇撰写的《ELK运维监控入门实战》系列,以Elasticsearch中文社区网站运维监控体系搭建作为案例,讲解了ELK监控系统的相关原理和技术实现,可作为对ELK感兴趣的同学的入门级文章。本篇作为第一篇,介绍了项目背景和技术架构。
6984 0
|
Kubernetes Cloud Native 安全
一文读懂 Traefik Hub
Hello folks,今天我们介绍一下 Traefik 生态中的“革命性产物”——Traefik Hub 云原生网络平台。(注:其与 Traefik Proxy 2.7 及更高版本兼容,早期版本不支持)
567 0
|
存储 SQL 数据采集
基于 Elasticsearch+Flink 的日志全观测最佳实践(二)|学习笔记
快速学习基于 Elasticsearch+Flink 的日志全观测最佳实践(二)
590 0
基于 Elasticsearch+Flink 的日志全观测最佳实践(二)|学习笔记
|
Docker 容器
卸载Docker
docker
354 0
|
监控 测试技术 API
内核调优 | 如何提升Elasticsearch master调度性能40倍
自建集群从Elasticsearch 6.3.2 版本升至 7.4.0 版本,如何解决Master卡顿、创建/删除索引耗时过多的问题?本文给你答案。
3815 0
内核调优 | 如何提升Elasticsearch master调度性能40倍
|
安全 机器学习/深度学习 容器
【云上未来】从Elasticsearch到ElasticStack的技术演进之路 |(附视频)
在2019云栖大会【Elasticsearch开发者生态专场】上,Elastic中国首席架构师朱杰(Jerry),为大家详细介绍了从“Elasticsearch”到“Elastic Stack”的产品和技术的演进趋势,并确立云上ES战略的意义。
3935 0
【云上未来】从Elasticsearch到ElasticStack的技术演进之路 |(附视频)
|
Linux 网络安全 开发工具
Python - poetry(1)包管理利器的入门介绍
Python - poetry(1)包管理利器的入门介绍
1349 0

热门文章

最新文章