分析器
可以直接定义在settings下analysis下的几个属性:
- Analyzer由Charactor Filter—>Tokenizer—>Token Filter三部分组成。
- Normalizer:规整器,它没有分词器,只有字符过滤器和分词过滤器。例如对keyword类型做标准化处理。
- Charactor Filter:字符过滤器,去掉文本原始的一些字符,例如html标签等。可以有多个
- Tokenizer:分词器,将上一步处理完的全文数据根据一定的规则拆分成词项。
- Token Filter:分词过滤器,转换分词后产生的所有词项,例如将分词转为小写,取出的、地、得等停用词,没有Tokenizer。
其中1是组装2345的,2和3是用于数据加入ES时处理原始数据的,4是用于2、3处理后分词的,5是用于4分词后产生的词项进行操作。
- Analyzer用于非keyword类型的字段,给keyword类型字段设置了analyzer,该字段会不会分词,keyword类型是不能设置analyzer的,该类型下没有该属性,强行设置会直接报错。
- Normalizer只用于keyword类型的字段,除了keyword类型,其他类型字段不能设置normalizer。
- 当查询设置了normalizer属性的keyword类型字段时,其normalizer也会作用到查询词上。
设置和查询分析器的两个restful的api,分别是_setting和_analyze
内置过滤器
-
html_strip:html标签过滤器
-
lowercase:忽略大小写
-
synonyms:同义词过滤,这个过滤器也支持指定近义词路径参数
synonyms_path
。http://localhost:9560/test_index_1/_settings/ { "index": { "analysis":{ "filter":{ "my_synonyms_filter": { "type": "synonym_graph", "synonyms": [ "China, chn" ] } }, "analyzer":{ "my_synonyms_analyzer": { "filter": [ "my_synonyms_filter" ], "type":"custom", "tokenizer":"ik_smart" } } } } }
-
pattern_replace:正则替换,将所有非数字或字母都替换为空值。
{ "index":{ "analysis":{ "char_filter":{ "patternFilter":{ "pattern":"[^A-Za-z0-9]", "type":"pattern_replace", "replacement":"" } } } } }
内置分析器、分词器
-
standard:根据Unicode文本分段算法,这个会把中文的话就把中文拆成一个字一个字的了,可能会造成冗余结果。还支持设置参数
stopwords
,stopwords_path
,max_token_length
{ "index":{ "analysis":{ "analyzer":{ "my_standrad_analyzer":{ "type":"standard", "max_token_length":5, "stopwords":"and,or" } } } } }
-
simple:将文本按照非字母字符进行拆分,并将分词转为小写。
-
english:将英文单词的各种变形处理成单词原型。
-
keyword:保留原始值不变
-
whitespace:按照空格进行分词。
-
classic:按照英语的语法进行分词,去掉一些碎词。比如:
分词器
-
letter:在非字母位置上分割文本。
-
pattern:使用正则表达式进行分词,
默认值为\W+
,匹配非单词字符(含中文)。支持配置一些额外参数。
其他示例:{ "settings": { "analysis": { "analyzer": { "email_analyzer":{ "type":"pattern", "pattern":"\\W|_", "lowercase":true } } } }
-
uax_url_email:按照文本中的url,邮箱地址去做分词。
官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html
拼音分词器:
git地址:https://github.com/medcl/elasticsearch-analysis-pinyin,相关参数配置:
总结如下:
- keep_first_letter:刘德华—>ldh,
默认值为true
- keep_separate_first_letter:刘德华—>l,d,h,
默认为false
- limit_first_letter_length:设置first_letter结果的最大长度,
默认长度16
- keep_full_pinyin:刘德华—> liu,de,hua,
默认为true
- keep_joined_full_pinyin:刘德华—>liudehua,
默认为false
- keep_none_chinese:非中文字不分词,
默认为true
- keep_none_chinese_together :将非中文放在一起,
默认为true
,DJ音乐家 -> DJ,yin,yue,jia,如果设置为false,DJ音乐家 -> D,J,yin,yue,jia - keep_none_chinese_in_first_letter :将非中文字母放在第一个字母中合成为一个分词,刘德华AT2016—>ldhat2016,
默认为true
- keep_none_chinese_in_joined_full_pinyin:保持非中文字母的完整拼音,刘德华2016—>liudehua2016,
默认为false
- none_chinese_pinyin_tokenize:将非中文字母(如果是拼音)的话拆分成一块一块的,
默认为true
,keep_none_chinese和keep_none_chinese_together应该首先启用。 - keep_original:保留原始输入值,
默认为false
- lowercase:小写非中文字母,
默认值为true
- trim_whitespace:去空格,
默认值为true
- remove_duplicated_term:重复的词将会被删除,de的—>de,(正常de的—>dede),
默认为false
- ignore_pinyin_offset:没看懂