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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
自然语言处理 算法 Java
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(4)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(4)
|
索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(7)
|
存储 自然语言处理
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(5)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(5)
145 0
|
自然语言处理 API 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(12)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(12)
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(1)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(1)
|
存储 自然语言处理 Java
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(6)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(6)
113 0
|
自然语言处理 索引
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(14)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(14)
128 0
|
自然语言处理 API 索引
带你读《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 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(15)
105 0
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(3)
带你读《Elastic Stack 实战手册》之35:——3.4.2.17.4.Analyzers / Custom analyzers(3)