分析器组成部分
-
字符过滤
-
使用字符过滤器将特定字符转变为其他字符序列,例如可以将&转为and
-
-
分词器
-
根据空格,换行等符号将文本切分为一个个单词
-
-
分词过滤器
-
对每个分词使用分词过滤器,将分词进行修改,添加或删除,例如常用的小写分词过滤器
-
-
分词索引
-
分词经历了分词过滤器就会被发送到Lucene进行文档的索引
-
使用分析器的方式
-
创建索引时,为特定的索引进行设置分析器
-
ES配置文件中设置全局分析器
-
在mapping中为某个字段指定分析器
内置分析器
-
标准分析器(standard analyzer):文本默认分析器,包括标准分词器,标准分词过滤器,小写转换分词过滤器和停用词分词过滤器
-
简单分析器(simple analyzer):用了小写转换分词器,在非字母处分词并自动转为小写,仅适用欧洲语言
-
空白分析器(whitespace analyzer):根据空白将文档切分为分词
-
停用词分析器(stop analyzer):在分词流中过滤了停用词
-
关键词分析器(keyword analyzer):将整个字段当做一个单独的分词,建议将index指定为not_analyzed,而不在映射中使用关键词分析器
-
模式分析器(pattern analyzer):允许指定一个分词切分的模式,建议使用定制分析器组合模式分词器
-
语言和多语言分析器:指定使用特定的语言分析器
-
雪球分析器(snowball analyzer):在标准分析器的基础上还使用了雪球词干器对文本进行词干提取
分词器
-
标准分词器(standard tokenizer)
-
适合大多数欧洲语言,也处理了Unicode文本切分,但分词默认最大长度255,同时移除了逗号句号标点符号
-
-
关键词分词器(keyword tokenizer)
-
将整个文本作为单个分词提供给分词过滤器,即不做任何分词操作
-
-
字母分词器(letter tokenizer)
-
根据非字母符号将文本切分为分词
-
-
小写分词器(lowercase tokenizer)
-
结合了字母分词器和小写分词过滤器行为
-
-
空白分词器(whitespace tokenizer)
-
根据空白将文档切分成分词
-
-
模式分词器(pattern tokenizer)
-
指定任意一个模式将文本切分为分词
-
-
NAX URL电子邮件分词器(uax_url_email tokenizer)
-
主要针对邮件地址
-
-
路径层次分词器(path tokenizer)
-
共享路径的文件被作为结果返回
-
分词过滤器
-
标准分词过滤器(standard token filter)
-
其实未做任何实质的操作
-
-
小写分词过滤器(lowercase token filter)
-
将任何经过的分词转换为小写
-
-
长度分词过滤器(length token filter)
-
将超出最短和最长范围的单词过滤掉
-
-
停用词分词过滤器(stop token filter)
-
将停用词从分词流中移除
-
-
截断分词过滤器(truncate token filter)
-
允许配置length参数,截断超过一定长度的分词,默认截断超过10个字符部分
-
-
修剪分词过滤器(trim token filter)
-
删除一个分词中所有空白部分
-
-
限制分词数量分词过滤器(limit token count token filter)
-
限制字段可包含分词的最大数量,只有范围内的分词才会本索引,默认是1
-
-
颠倒分词过滤器(reverse token filter)
-
颠倒每个分词
-
-
唯一分词过滤器(unique token filter)
-
值保留第一个匹配分词的元数据,其他重复的被删除
-
-
ASCII折叠分词过滤器(asciifolding token filter)
-
将不是普通ASCII字符的Unicode转换为ASCII中对应的字符
-
-
同义词分词过滤器(synonyms token filter)
-
使用关键词的同义词取代原始分词
-
-
N元语法、侧边N元语法和滑动窗口
-
N元语法(按照N切分)
-
设置min_gram: 生成的最小N元语法
-
设置max_gram: 生成的最大N元语法
-
-
侧边N元语法
-
是N元语法的变种,从左端开始按照设置值匹配,例如"hello",设置值分别为2,4,会得到he,hel,hell三个分词
-
-
滑动窗口分词过滤器
-
根据分词按照设置分词,例如"foo bar baz"设置为2,3,会得到foo bar,bar baz, foo bar baz,但结果其实是包含单个分词的,因为shingles分词过滤器作用后会和原始分词器产生的分词合并,可以通过output_unigrams为false解决这个问题
-
-