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 类型词元过滤器设置的设置:
设置 | 描述 |
| 最小数值. 默认 |
| 最大数值.默认 |
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类型词元过滤器设置的设置:
设置 | 描述 |
| 默认值 |
| 默认值 |
| 已弃用. |
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类型的词元过滤器的可选设置:
设置 | 描述 |
| 最大的shingle数量. 默认 |
| 最小的shingle数量. 默认 |
| 如果为 |
| 如果 |
| 连接相邻的词元生成词组的字符串. 默认 |
| 用于替换流中每个没有实际词元的位置的字符串。例如,当stop过滤器与 |
Stop Token Filter(Stop 词元过滤器)
stop类型的词元过滤器,用于从词元流中移除stop words。
以下是stop类型的词元过滤器的可选设置:
| 停止词列表. 默认 |
| 无效词配置文件路径(绝对或者相对路径). 每个停止词自占一行 (换行分隔). 文件必须是UTF-8编码. |
| 设置为 |
| 设置为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 | |
Dutch | |
English | |
Finnish | |
French | |
Galician |
|
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 词元过滤器)
通过应用自定义映射来覆盖词干算法,然后保护这些术语不被词干修改。 必须放置在任何词干过滤器之前。
规则通过=>
分隔开
设置 | 描述 |
| 映射规则列表. |
| 映射列表文件的路径 ( |
示例:
Keyword Marker Token Filter(Keyword Marker 词元过滤器)
设置 | 描述 |
| 关键词列表. |
| 关键词列表文件的路径 ( |
| 设置为 |
示例:
Keyword Repeat Token Filter(Keyword Repeat 词元过滤器)
keyword_repeat词元过滤器将每个传入两次的词元发送一次作为关键字,一次作为非关键字,以允许将术语的未设置版本与该术语的主题版本并排编入索引。
鉴于此过滤器的性质,未被后续监听器转换的每个词元将被索引两次。 因此,考虑添加unique
过滤器,only_on_same_position设置为true可以丢弃不必要的重复项。
示例如下:
Last updated