在es中,一个分词器通常可以包含三个模版,不论是内置的还是自定义:character filters,tokenizers, token filters.
内置的分析程序会将这些构建块预先打包到适合不同语言和文本类型的分析程序中。弹性搜索还公开了单个的构建块,以便将它们组合在一起来定义新的自定义分析程序。
character filters(字符过滤器)
字符筛选器接收原始文本作为字符流,并通过添加、删除或更改字符来转换流,例如,一个字符过滤器可用于将印度阿拉伯数字(٠١٢٣٤٥٦٧٨٩)转化成阿拉伯数字(0123456789),或者从流中剥离HTML <b>
元素。
分析器可能有零个或多个字符过滤器,这些过滤器是按顺序应用的
tokenizers(分词器)
tokenizer接收一个字符流,将其分解为单个令牌(通常是单个单词),并输出一个令牌流。例如,每当它看到任何空白时,一个空格记号赋予器将文本分解为令牌。它将把“敏捷的棕色狐狸”改为“敏捷,棕色,狐狸!”
tokenizer还负责记录每个术语的顺序或位置,以及术语所代表的原始单词的开始和结束字符偏移量。
一个分析仪必须只有一个记号笔。
token filters(令牌过滤器)
令牌过滤器接收令牌流,并可添加、删除或更改令牌。例如,一个小写的令牌过滤器将所有令牌转换为小写,一个停止令牌过滤器删除了与令牌流相似的普通单词(停止字),并且一个同义词令牌过滤器将同义词引入到令牌流中。
令牌过滤器不允许更改每个令牌的位置或字符偏移量。
一个分析器可能有零个或多个令牌过滤器,它们是按顺序应用的。
内置的分析程序可以直接使用,不需要任何配置。但是,其中一些支持配置选项来改变它们的行为。例如,可以配置标准分析器来支持stop单词列表。
keep_first_letter 阿莫西林>amxl default: true
keep_separate_first_letter 阿莫西林>a,m,x,l default: false
lowercase lowercase non Chinese letters(小写非中文字母) default: true
trim_whitespace 剔除空格 default: true
keep_full_pinyin 阿莫西林>[a,mo,xi,lin] default: true
keep_joined_full_pinyin 阿莫西林> [amoxilin] default: false
keep_none_chinese_in_joined_full_pinyin 阿莫西林123>amoxilin123 default: false
none_chinese_pinyin_tokenize amoxilin123jiaonang>a,mo,xi,lin,123,jiao,nang default: true
keep_none_chinese_in_first_letter 阿莫西林AT2018->amxlat2018 default: true
remove_duplicated_term when this option enabled, duplicated term will be removed to save index default: false
limit_first_letter_length set max length of the first_letter result default: 16
keep_original when this option enabled, will keep original input as well default: false