Filters
ASCIIFoldingFilter
将 Unicode 转换成 ascii
工厂类
solr.ASCIIFoldingFilterFactory
示例
输入
"á" (Unicode character 00E1)
输出
"a" (ASCII character 97)Beider-MorseFilter
Beider-Morse Phonetic Matching (BMPM),貌似是一个识别名字的算法,即使名字拼写错误或者是用的不同的语言
工厂类
solr.BeiderMorseFilterFactory
参数
nameType:名字的类型,取值为 [GENERIC , ASHKENAZI , SEPHARDIC]。如果不处理 Ashkenazi 或者 Sephardic 名字, 就用 GENERIC
ruleType:规则类型,取值为 [APPROX(近似) , EXACT(精确)]
concat:多个可能的匹配是否用管道符"|"连接
languageSet:语言集,"auto" 表示允许过滤器识别语言,或者是一个逗号分隔的列表
示例
ClassicFilter
这个过滤器接收 ClassicTokenizer 的输出,去掉缩写词里的句点和所有格里的 s
工厂类
solr.ClassicFilterFactory
示例
CommonGramsFilter
貌似是用来过滤常用词的,例如停止词:将常用词和词元组合
工厂类
solr.CommonGramsFilterFactory
参数
words:常用词文件名,txt 格式,例如 stopwords.txt.
format:可选的,如果常用词文件格式是 Snowball,通过这个参数指定
ignoreCase:与常用词文件比较时,是否忽略大小写,默认=fasle
示例
CollationKeyFilter
可用于语言相关的排序,一般用于排序,也可用于高级搜索
Daitch-MokotoffSoundexFilter
实现了 Daitch-Mokotoff Soundex 算法(?),用于识别相似的名字,即使有拼写错误
工厂类
solr.DaitchMokotoffSoundexFilterFactory
参数
inject :true 表示新的词元会添加到词元流,false 表示开启匹配但是精确的拼写将不会被匹配。默认=true
DoubleMetaphoneFilter
使用 DoubleMetaphone 编码来创建词元
工厂类
solr.DoubleMetaphoneFilterFactory
参数
inject:true 表示新的词元会添加到词元流,false 表示开启匹配但是精确的拼写将不会被匹配。默认=true
maxCodeLength:将要生成的 code 的最大长度
示例
EdgeN-GramFilter
貌似和 edge n-gram Tokenizer 没什么不同
工厂类
solr.EdgeNGramFilterFactory
参数
minGramSize:gram 最小值,默认=1
maxGramSize:gram 最大值,默认=1
示例
示例2
EnglishMinimalStemFilter
将英文单词的复数形式变为单数形式
工厂类
solr.EnglishMinimalStemFilterFactory
参数
无
示例
FingerprintFilter
将输入的多个 token 排序,去重,然后串联在一起,返回单个 token,可用于聚集/链接的用例(?)
工厂类
solr.FingerprintFilterFactory
参数
separator :用于连接多个 token 的字符,默认是空格(" ")
maxOutputTokenSize :输出的 token 最大长度,如果超过的话,未输出的 token 被忽略(?),默认=1024
示例
HunspellStemFilter
貌似是个英文词根过滤器,把各种时态的动词变成一般现在时态
HyphenatedWordsFilter
用于处理用连字符连接的单词:去掉连字符;一般是因为换行导致一个单词位于 2 行,这时可以用连字符表示这是同一个单词
ICUFoldingFilter
这个过滤器可以更好的代替 ASCII Folding Filter, Lower Case Filter, ICU Normalizer 2 Filter 的组合使用
ICUNormalizer2Filter
ICUTransformFilter
KeepWordFilter
凡是不在保留字文件里的 token 都会被丢弃
工厂类
solr.KeepWordFilterFactory
参数
words:必须,保留字文件路径,绝对路径或者相对路径(相对 solr 配置目录)均可;该文件是个文本文件,每行一个保留字,空行或者以 # 开头的行会被忽略
ignoreCase:是否忽略大小写,默认=false;若为 true,那么会假设保留字文件里的保留字全部为小写
enablePositionIncrements:如果 luceneMatchVersion>=5.0,该参数无效
示例
示例2
示例3
先用 LowerCaseFilterFactory 过滤,KeepWordFilterFactory 不忽略大小写
KStemFilter
貌似是对英文动词时态进行过滤
LengthFilter
对 token 的长度进行过滤,范围内的 token 保留,范围外的 token 被丢弃
工厂类
solr.LengthFilterFactory
参数
min:token 最小长度
max:token 最大长度,必须 >= min
示例
LowerCaseFilter
很显然是把大小转换为小写的过滤器
ManagedStopFilter
和 StopFilter 一样,只不过 stopword 文件是通过一个 url 获取而不是直接访问磁盘文件
参数
managed:貌似是一个 REST API 接口的名字
ManagedSynonymFilter
和 SynonymFilter 一样,只不过 synonyms 文件是通过一个 url 获取而不是直接访问磁盘文件
参数
managed:貌似是一个 REST API 接口的名字
N-GramFilter
和 n-gram 分词器类似吧
NumericPayloadTokenFilter
貌似是给 token 一个浮点数的值
PatternReplaceFilter
将 token 与一个正则表达式匹配,匹配的就替换成指定的值,不匹配的保持原样
工厂类
solr.PatternReplaceFilterFactory
参数
pattern:必须,正则表达式,用来匹配 token
replacement:必须,用来替换 token 中匹配的部分的字符串
replace:取值为 ["all" , "first"],默认=all,表示是替换所有匹配的还是仅替换第一个匹配的
示例
示例2
仅替换第一个匹配
示例3
复杂的
PhoneticFilter
基于 phonetic 语音编码算法过滤......
PorterStemFilter
貌似这又是一个对英文单词时态做过滤的
RemoveDuplicatesTokenFilter
移除重复的 token,所谓重复 token 是文本和位置值相同的 token
工厂类
solr.RemoveDuplicatesTokenFilterFactory
参数
无
示例
本例中用到了同义词过滤器,同义词文件(synonyms.txt)内容如下
ReversedWildcardFilter
通配符反转过滤器,不含通配符的 token 不会反转,例如输入 "abc",输出 "cba"
ShingleFilter
把输入的 token 组合成一个新的 token,组合采用 n-gram 算法
SnowballPorterStemmerFilter
一个词根相关的过滤器,貌似不支持中文
StandardFilter
貌似在 luceneMatchVersion >= 3.1时无效
提示:luceneMatchVersion 的值在 solrconfig.xml 里查看
StopFilter
停止词过滤,停止词会被丢弃,solr 自带了一个标准的停止词文件,即配置目录下的 stopwords.txt,用于英文......
工厂类
solr.StopFilterFactory
参数
words:可选,停止词文件路径,停止词文件每行一个停止词,空行和 # 开头的行被忽略,可以用绝对路径,或相对(solr 配置目录)
format:可选,停止词格式,取值可以是 snowball
ignoreCase:是否忽略大小写,默认=false
enablePositionIncrements:如果 luceneMatchVersion >=5.0,该参数无效
示例
SuggestStopFilter
与 StopFilter 的区别是:不会把最后一个 token 移除,除非是该 token 紧跟一个分隔符(例如空格,标点符号,......)
StopFilter 用于索引的分词,而 SuggestStopFilter 用于查询的分词
SynonymFilter
同义词过滤器,每个 token 都会在同义词列表里查找,如果有匹配,会用同义词代替原 token
工厂类
solr.SynonymFilterFactory
参数
synonyms:必须,同义词文件路径,有2种指定同义词映射的方式
逗号分隔的单词列表,token 匹配任意一个单词,所有同义词都会替换原 token,且原 token 会保留
2个逗号分隔的单词列表,2个列表之间用"=>"分隔,token 匹配左边列表中任意单词,会用右边列表里的单词进行替换的同义词列表,除非右边列表里有原 token,否则原 token 不会保留
ignoreCase:可选的,是否忽略大小写,默认=false
expand:可选,true 表示用所有同义词来替换原 token,false 表示只用第一个同义词来替换,默认=true
format:可选,默认=solr,同义词格式
tokenizerFactory:可选,默认=WhitespaceTokenizerFactory,用来对同义词文件进行分析的分词器
analyzer:可选,默认=WhitespaceTokenizerFactory,用来对同义词文件进行分析的分析器
同义词文件 mysynonyms.txt:
示例
TokenOffsetPayloadFilter
将 token 在原输入流中的位置记录下来,位置表示为[起始位置, 结束位置]
工厂类
solr.TokenOffsetPayloadTokenFilterFactory
参数
无
示例
TrimFilter
去掉 token 头尾的空白,多数分词器都是用空白进行分词的,所以这个过滤器用于一些特殊的场景
工厂类
solr.TrimFilterFactory
参数
updateOffsets:如果 luceneMatchVersion>=5.0,该参数无效
示例
TypeAsPayloadFilter
为 token 添加类型,例如
TypeTokenFilter
貌似是黑白名单的过滤器(?),又或者是给 token 标记类型的过滤器(?)
工厂类
solr.TypeTokenFilterFactory
参数
types:类型文件的位置
useWhitelist:
true, types 是个白名单
false,types 是个黑名单
enablePositionIncrements:luceneMatchVersion>=5.0,该值无效
WordDelimiterFilter
用分隔符 token 的过滤器,下面的规则用于决定什么是分隔符
大小写,例如:"CamelCase" -> "Camel", "Case"。开关为 splitOnCaseChange="0"
字母数字,例如:"Gonzo5000" -> "Gonzo", "5000" "4500XL" -> "4500", "XL"。开关为 splitOnNumerics="0"
非字母数字的字符被丢弃,例如:"hot-spot" -> "hot", "spot"
末尾的"s"被移除,例如:"O'Reilly's" -> "O", "Reilly"
头尾的分隔符被丢弃,例如:"--hot-spot--" -> "hot", "spot"
工厂类
solr.WordDelimiterFilterFactory
参数
generateWordParts:默认=1,If non-zero, splits words at delimiters. For example:"CamelCase","hot-spot" -> "Camel", "Case", "hot", "spot"
generateNumberParts:默认=1,If non-zero, splits numeric strings at delimiters:"1947-32" ->"1947", "32"
splitOnCaseChange:默认=1,If 0, words are not split on camel-case changes:"BugBlaster-XL" -> "BugBlaster", "XL". Example 1 below illustrates the default (non-zero) splitting behavior.
splitOnNumerics:默认=1,If 0, don't split words on transitions from alpha to numeric:"FemBot3000" -> "Fem", "Bot3000"
catenateWords:默认=0,If non-zero, maximal runs of word parts will be joined:"hot-spot-sensor's" -> "hotspotsensor"
catenateNumbers:默认=0,If non-zero, maximal runs of number parts will be joined:1947-32" -> "194732"
catenateAll:默认=0,If non-zero, runs of word and number parts will be joined:"Zap-Master-9000" -> "ZapMaster9000"
preserveOriginal:默认=0,If non-zero, the original token is preserved:"Zap-Master-9000" -> "Zap-Master-9000", "Zap", "Master", "9000"
protected:可选,保护文件的路径,该文件包含一个保护词列表,这些保护词不会被分割
stemEnglishPossessive:默认=1,去掉表示所有格的"s"
示例
示例2
不用大小写分隔,不生成数字 token
示例3
示例3
示例4
使用一个保护文件,包含了"AstroBlaster", "XL-5000"
Last updated