TokenFilters (词元过滤器) 接受来自 tokenizer(分词器)arrow-up-right 的 tokens 流,并且可以修改 tokens (例如小写转换),删除 tokens (例如,删除 stopwords 停用词)或添加 tokens (例如,同义词)。
Elasticsearch 提供了很多内置的token filters (词元过滤器),可以用于构建 custom analyzersarrow-up-right (自定义分词器)。
Standard Token Filters(标准词元过滤器)
standard 类型的词元过滤器规范化从Standard Tokenizer(标准分词器) 中提取的tokens 。
提示 :标准词元过滤器目前什么都不做。 如果在将来的版本中需要添加一些过滤功能,它将保留为占位符。
ASCII Folding Token Filter(ASCII Folding 词元过滤器)
asciifolding 类型的词元过滤器,将不在前127个ASCII字符(“基本拉丁文”Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效项(如果存在)。
例如:
Copy "index" : {
"analysis" : {
"analyzer" : {
"default" : {
"tokenizer" : "standard",
"filter" : ["standard", "asciifolding"]
}
}
}
} 接受默认为false 的preserve_original 设置,但如果为true ,则将保留原始token 并发出 folded token 。
例如:
Flatten Graph Token Filter(Flatten Graph 词元过滤器)
警告:
此功能是实验性的,可能会在将来的版本中完全更改或删除。Elastic 将采取最大的努力来解决任何问题,但实验功能不受SLA 官方功能的支持。
flatten_graph 词元过滤器接受任意图形 token 流,例如由Synonym Graph Token Filter 产生的图形token 流,并将其平坦化为适用于索引的单个线性标记链。
这是一个有损的过程,因为单独的边路径彼此挤压,但是如果您在索引期间必需使用图形 token 流,因为Lucene索引当前无法表示图形。 因此,最好仅在搜索时间应用图形分析器,因为它保留了完整的图形结构,并为近似度查询提供了正确的匹配。
有关此主题及其各种复杂性的更多信息,请阅读Lucene’s TokenStreams are actually graphs arrow-up-right 博客文章。
Length Token Filter(长度词元过滤器)
length 类型的词元过滤器,可以删除流中过长或过短的字词。
以下是可以为length 类型词元过滤器设置的设置:
最大数值.默认Integer.MAX_VALUE.
Lowercase Token Filter(Lowercase 词元过滤器)
lowercase 类型的词元过滤器,将词元文本规范化为小写。
Lowercase Token Filter 通过language 参数支持 Greek(希腊语) ,Irish (爱尔兰语) 和 Turkish(土耳其) 小写词元过滤器。 以下是自定义分词器中的使用示例
Uppercase Token Filter(Uppercase词元过滤器)
uppercase 类型的词元过滤器,将词元文本规范化为大写。
NGram Token Filter(NGram词元过滤器)
nGram 类型的词元过滤器。
以下是可以为nGram 类型词元过滤器设置的设置:
Edge NGram Token Filter(Edge NGram 词元过滤器)
edgeNGram 类型的词元过滤器。
以下是可以为edgeNGram 类型词元过滤器设置的设置:
已弃用.front/ back.默认值front.
Porter Stem Token Filter(Porter Stem 词元过滤器)
porter_stem 类型的词元过滤器,根据波特干扰算法转换词元流。
请注意,Porter Stem 词元过滤器的输入必须已经是小写,所以您需要使用Lower Case Token Filter arrow-up-right or Lower Case Tokenizer arrow-up-right 在之前的分词器链上,以使其正常工作!例如,使用自定义分词器时,请确保过滤器列表中的 lowercase 过滤器位于porter_stem 过滤器之前
Shingle Token Filter(Shingle 词元过滤器)
shingle 类型的词元过滤器,用于从词元流中构建 shingles (token n-grams )。 换句话说,它创建词元的组合作为单个词元。 例如,句子 “please divide this sentence into shingles ” ,可能会被划分为词组“please divide ”,“divide this ”,“this sentence ”,“sentence into ”和“into shingles ”。
此过滤器通过插入 filler tokens (使用“_”的词元)来处理游标自增 > 1。游标不从0开始。
以下是 shingle 类型的词元过滤器的可选设置:
如果为 true输出将会包含输入的tokens (unigrams) 以及shingles . 默认 true.
output_unigrams_if_no_shingles
如果 output_unigrams 为false ,如果没有可用的shingles 输出将会包含输入的tokens (unigrams) .提示 如果 output_unigrams 为true 当前设置不生效. 默认 false.
用于替换流中每个没有实际词元的位置的字符串。例如,当stop 过滤器与shingle过滤器一起使用时,如果位置增量大于1. 默认 "_"
Stop Token Filter(Stop 词元过滤器)
stop 类型的词元过滤器,用于从词元流中移除stop words 。
以下是stop 类型的词元过滤器的可选设置:
无效词配置文件路径(绝对或者相对路径). 每个停止词自占一行 (换行分隔). 文件必须是UTF-8 编码.
设置为 true所有词被转为小写. 默认 false.
设置为false ,以便不忽略搜索的最后一个字词,如果它是无效词。 这对于完成建议者非常有用,因为像green a 一样的查询可以扩展到green apple ,即使你删除一般的无效词。 默认为true 。
stopwords 参数接受一个数组类型的无效词:
或预定义的语言特定列表:
lasticsearch 提供以下预定义语言列表:
_arabic_, _armenian_, _basque_, _brazilian_, _bulgarian_, _catalan_, _czech_, _danish_, _dutch_, _english_, _finnish_, _french_, _galician_, _german_, _greek_, _hindi_, _hungarian_, _indonesian_, _irish_, _italian_, _latvian_, _norwegian_, _persian_, _portuguese_, _romanian_, _russian_, _sorani_, _spanish_, _swedish_, _thai_, _turkish_.
空的无效词列表(禁用无效词)使用:\_none_。
Word Delimiter Token Filter(Word Delimiter 词元过滤器)
拆分字内分隔符(默认情况下,所有非字母数字字符)。.
按大小写转换拆分: "PowerShot" → "Power", "Shot"
按字母数字转换拆分: "SD500" → "SD", "500"
每个子词的前导和尾随的词内分隔符都被忽略: "//hello---there,
dude
" → "hello", "there", "dude"
每个子词都删除尾随的“s”: "O’Neil’s" → "O", "Neil"
参数包括:
generate_word_parts
true 导致生成单词部分:"PowerShot" ⇒ "Power" "Shot"。默认 true
generate_number_parts
true 导致生成数字子词:"500-42" ⇒ "500" "42"。默认 true
catenate_numbers
true 导致单词最大程度的链接到一起:"wi-fi" ⇒ "wifi"。默认 false
catenate_numbers
true 导致数字最大程度的连接到一起:"500-42" ⇒ "50042"。默认 false
catenate_all
true 导致所有的子词可以连接:"wi-fi-4000" ⇒ "wifi4000"。默认 false
split_on_case_change
true 导致 "PowerShot" 作为两个词元("Power-Shot" 作为两部分看待)。默认 true
preserve_original
true 在子词中保留原始词: "500-42" ⇒ "500-42" "500" "42"。默认 false
split_on_numerics
true 导致 "j2se" 成为三个词元: "j" "2" "se"。默认 true
stem_english_possessive
true 导致每个子词中的 "'s" 都会被移除:"O’Neil’s" ⇒ "O", "Neil"。默认 true
高级设置:
protected_words
被分隔时的受保护词列表。 一个数组,或者也可以将protected_words_path 设置为配置有保护字的文件(每行一个)。 如果存在,则自动解析为基于config/ 位置的位置。
type_table
例如,自定义类型映射表(使用type_table_path 配置时):
提示:
使用像 standard tokenizer 的tokenizer 可能会干扰catenate_ * 和preserve_original 参数,因为原始字符串在分词期间可能已经丢失了标点符号。 相反,您可能需要使用 whitespacetokenizer 。
Stemmer Token Filter(Stemmer 词元过滤器)
一个过滤器,通过单个统一接口提供(几乎)所有可用的词干词元过滤器的访问,例如:
language / name 参数用以下可用值控制词干(首选过滤器以粗体标记):
Stemmer Override Token Filter(Stemmer Override 词元过滤器)
通过应用自定义映射来覆盖词干算法,然后保护这些术语不被词干修改。 必须放置在任何词干过滤器之前。
规则通过=>分隔开
映射列表文件的路径 (config目录的相对路径或者绝对路径) to a list of mappings.
示例:
Keyword Marker Token Filter(Keyword Marker 词元过滤器)
关键词列表文件的路径 (config目录的相对路径或者绝对路径).
设置为 true 会把词转化为小写. 默认 false.
示例:
Keyword Repeat Token Filter(Keyword Repeat 词元过滤器)
keyword_repeat 词元过滤器将每个传入两次的词元发送一次作为关键字,一次作为非关键字,以允许将术语的未设置版本与该术语的主题版本并排编入索引。
鉴于此过滤器的性质,未被后续监听器转换的每个词元将被索引两次。 因此,考虑添加unique过滤器,only_on_same_position 设置为true 可以丢弃不必要的重复项。
示例如下: