3.3.5.Token Filters(词语过滤器)
TokenFilters(词元过滤器) 接受来自 tokenizer(分词器) 的 tokens 流,并且可以修改 tokens(例如小写转换),删除 tokens(例如,删除 stopwords停用词)或添加 tokens(例如,同义词)。
Elasticsearch 提供了很多内置的token filters(词元过滤器),可以用于构建 custom analyzers(自定义分词器)。
Standard Token Filters(标准词元过滤器)
standard类型的词元过滤器规范化从Standard Tokenizer(标准分词器)中提取的tokens。
提示:标准词元过滤器目前什么都不做。 如果在将来的版本中需要添加一些过滤功能,它将保留为占位符。
ASCII Folding Token Filter(ASCII Folding 词元过滤器)
asciifolding类型的词元过滤器,将不在前127个ASCII字符(“基本拉丁文”Unicode块)中的字母,数字和符号Unicode字符转换为ASCII等效项(如果存在)。
例如:
接受默认为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博客文章。
Length Token Filter(长度词元过滤器)
length类型的词元过滤器,可以删除流中过长或过短的字词。
以下是可以为length 类型词元过滤器设置的设置:
设置
描述
min
最小数值. 默认 0
.
max
最大数值.默认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类型词元过滤器设置的设置:
设置
描述
min_gram
默认值 1
.
max_gram
默认值2
.
Edge NGram Token Filter(Edge NGram 词元过滤器)
edgeNGram类型的词元过滤器。
以下是可以为edgeNGram类型词元过滤器设置的设置:
设置
描述
min_gram
默认值 1
.
max_gram
默认值 2
.
side
已弃用.front
/ back
.默认值front
.
Porter Stem Token Filter(Porter Stem 词元过滤器)
porter_stem类型的词元过滤器,根据波特干扰算法转换词元流。
请注意,Porter Stem词元过滤器的输入必须已经是小写,所以您需要使用Lower Case Token Filter or Lower Case Tokenizer 在之前的分词器链上,以使其正常工作!例如,使用自定义分词器时,请确保过滤器列表中的 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类型的词元过滤器的可选设置:
设置
描述
max_shingle_size
最大的shingle数量. 默认 2
.
min_shingle_size
最小的shingle数量. 默认 2
.
output_unigrams
如果为 true
输出将会包含输入的tokens (unigrams)以及shingles. 默认 true
.
output_unigrams_if_no_shingles
如果 output_unigrams
为false
,如果没有可用的shingles输出将会包含输入的tokens (unigrams).提示如果 output_unigrams
为true当前设置不生效. 默认 false
.
token_separator
连接相邻的词元生成词组的字符串. 默认 " "
.
filler_token
用于替换流中每个没有实际词元的位置的字符串。例如,当stop过滤器与shingle
过滤器一起使用时,如果位置增量大于1. 默认 "_"
Stop Token Filter(Stop 词元过滤器)
stop类型的词元过滤器,用于从词元流中移除stop words。
以下是stop类型的词元过滤器的可选设置:
stopwords
停止词列表. 默认 _english_
无效词.
stopwords_path
无效词配置文件路径(绝对或者相对路径). 每个停止词自占一行 (换行分隔). 文件必须是UTF-8编码.
ignore_case
设置为 true
所有词被转为小写. 默认 false
.
remove_trailing
设置为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 词元过滤器)
拆分字内分隔符(默认情况下,所有非字母数字字符)。.
"Wi-Fi" → "Wi", "Fi"
按大小写转换拆分: "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参数,因为原始字符串在分词期间可能已经丢失了标点符号。 相反,您可能需要使用 whitespace
tokenizer。
Stemmer Token Filter(Stemmer 词元过滤器)
一个过滤器,通过单个统一接口提供(几乎)所有可用的词干词元过滤器的访问,例如:
language / name参数用以下可用值控制词干(首选过滤器以粗体标记):
Arabic
Armenian
Basque
Brazilian Portuguese
Bulgarian
Catalan
Czech
Danish
Finnish
French
Galician
galician
, minimal_galician
(Plural step only)
German
Greek
Hindi
Hungarian
Indonesian
Irish
Italian
Kurdish (Sorani)
Latvian
Lithuanian
Norwegian (Bokmål)
Norwegian (Nynorsk)
Portuguese
Romanian
Russian
Spanish
Swedish
Turkish
Stemmer Override Token Filter(Stemmer Override 词元过滤器)
通过应用自定义映射来覆盖词干算法,然后保护这些术语不被词干修改。 必须放置在任何词干过滤器之前。
规则通过=>
分隔开
设置
描述
rules
映射规则列表.
rules_path
映射列表文件的路径 (config目录的相对路径或者绝对路径
) to a list of mappings.
示例:
Keyword Marker Token Filter(Keyword Marker 词元过滤器)
设置
描述
keywords
关键词列表.
keywords_path
关键词列表文件的路径 (config目录的相对路径或者绝对路径
).
ignore_case
设置为 true
会把词转化为小写. 默认 false
.
示例:
Keyword Repeat Token Filter(Keyword Repeat 词元过滤器)
keyword_repeat词元过滤器将每个传入两次的词元发送一次作为关键字,一次作为非关键字,以允许将术语的未设置版本与该术语的主题版本并排编入索引。
鉴于此过滤器的性质,未被后续监听器转换的每个词元将被索引两次。 因此,考虑添加unique
过滤器,only_on_same_position设置为true可以丢弃不必要的重复项。
示例如下:
Last updated