《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