天天看点

es的分词器analyzer

分词器使用的两个情形:  

1,Index time analysis.  创建或者更新文档时,会对文档进行分词

2,Search time analysis.  查询时,对查询语句分词

- 查询时通过analyzer指定分词器

- 创建index mapping时指定search_analyzer

注意:

 明确字段是否需要分词,不需要分词的字段将type设置为keyword,可以节省空间和提高写性能。

运行结果:

ES内置了很多种analyzer。比如:

standard  由以下组成

tokenizer:Standard Tokenizer

token filter:Standard Token Filter,Lower Case Token Filter,Stop Token Filter 

得到结果:      

 

whitespace  空格为分隔符

simple     

es的分词器analyzer
es的分词器analyzer

stop   默认stopwords用_english_ 

es的分词器analyzer
es的分词器analyzer

keyword  不分词的

es内置很多分词器,但是对中文分词并不友好,例如使用standard分词器对一句中文话进行分词,会分成一个字一个字的。这时可以使用第三方的Analyzer插件,比如 ik、pinyin等。这里以ik为例

1,首先安装插件,重启es:

2,使用示例:

GET _analyze

{

  "analyzer": "ik_smart",

  "text": "你好吗?我有一句话要对你说呀。"

}

参考:https://github.com/medcl/elasticsearch-analysis-ik

还可以用内置的 character filter, tokenizer, token filter 组装一个analyzer(custom analyzer)

custom  定制analyzer,由以下几部分组成

0个或多个e character filters

1个tokenizer

0个或多个 token filters

    

自定义分词需要在索引的配置中设定,如下所示:

es的分词器analyzer
es的分词器analyzer

会影响后续tokenizer解析的position和offset信息

html strip  除去html标签和转换html实体

参数:escaped_tags不删除的标签

  

mapping    映射类型,以下参数必须二选一

mappings 指定一组映射,每个映射格式为 key=>value

mappings_path 绝对路径或者相对于config路径   key=>value

es的分词器analyzer
es的分词器analyzer

pattern replace

pattern参数  正则

replacement 替换字符串 可以使用$1..$9

flags  正则标志

standard

参数:max_token_length,最大token长度,默认是255

letter    非字母时分成多个terms

lowcase  跟letter tokenizer一样 ,同时将字母转化成小写

whitespace   按照空白字符分成多个terms

参数:max_token_length

keyword   空操作,输出完全相同的文本

参数:buffer_size,单词一个term读入缓冲区的长度,默认256

lowercase  将输出的单词转化成小写

stop  从token流中删除stop words 。

es的分词器analyzer
es的分词器analyzer
上一篇: web生成工具
下一篇: ant