过滤器
过滤器检查标记流,并根据所使用的过滤器类型保留、转换或丢弃它们。
关于过滤器
与分词器一样,过滤器消耗输入并产生标记流。过滤器也派生自 org.apache.lucene.analysis.TokenStream
,但与分词器不同,过滤器的输入是另一个 TokenStream。过滤器的工作通常比分词器简单,因为在大多数情况下,过滤器会依次查看流中的每个标记,并决定是否传递、替换或丢弃它。
过滤器还可以通过向前查看来考虑多个标记,从而进行更复杂的分析,尽管这种情况不太常见。这种过滤器的一个假设用途可能是规范化将被标记为两个单词的州名称。例如,单个标记“california”将被替换为“CA”,而标记对“rhode”后跟“island”将变为单个标记“RI”。
因为过滤器消耗一个 TokenStream
并产生一个新的 TokenStream
,所以它们可以无限期地一个接一个地链接。链中的每个过滤器依次处理其前任产生的标记。因此,您指定过滤器的顺序非常重要。通常,最通用的过滤首先完成,稍后的过滤阶段更专业。
过滤器配置
过滤器在模式文件中使用 <filter>
元素配置,作为 <analyzer>
的子元素,紧随 <tokenizer>
元素之后。
例如
-
带名称
-
带类名(传统)
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="englishPorter"/>
</analyzer>
</fieldType>
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
此示例从 Solr 的标准分词器开始,该分词器将字段的文本分解为标记。然后,所有标记都设置为小写,这将有助于在查询时进行不区分大小写的匹配。
上面示例中的最后一个过滤器是一个词干提取器过滤器,它使用 Porter 词干提取算法。
词干提取
词干提取器基本上是一组映射规则,它将一个词的各种形式映射回其派生的基本词或词干词。
例如,在英语中,单词“hugs”、“hugging”和“hugged”都是词干词“hug”的形式。词干提取器会将所有这些词替换为“hug”,这将是索引的内容。这意味着对“hug”的查询将匹配术语“hugged”,但不匹配“huge”。
相反,将词干提取器应用于您的查询词将允许包含非词干词(例如“hugging”)的查询匹配具有相同词干词的不同变体的文档,例如“hugged”。这是因为索引器和查询都将映射到相同的词干(“hug”)。
显然,词干提取是非常特定于语言的。Solr 包括由 Snowball 生成器创建的几个特定于语言的词干提取器,这些词干提取器基于 Porter 词干提取算法。通用的 Snowball Porter 词干提取器过滤器可用于配置任何这些语言的词干提取器。Solr 还包括一个用于英语 Snowball 词干提取器的便捷包装器。还有几个用于非英语语言的专用词干提取器。这些词干提取器在语言分析中进行了描述。
带有参数的过滤器
可以将参数传递给分词器工厂,以通过设置<filter>
元素上的属性来修改其行为。例如
-
带名称
-
带类名(传统)
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer name="pattern" pattern="; " />
<filter name="length" min="2" max="7"/>
</analyzer>
</fieldType>
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="; " />
<filter class="solr.LengthFilterFactory" min="2" max="7"/>
</analyzer>
</fieldType>
以下部分描述了此 Solr 版本中包含的过滤器工厂。
ASCII 折叠过滤器
此过滤器将不在基本拉丁 Unicode 块(前 127 个 ASCII 字符)中的字母、数字和符号 Unicode 字符转换为其 ASCII 等效字符(如果存在)。此过滤器转换以下 Unicode 块中的字符
工厂类: solr.ASCIIFoldingFilterFactory
参数
preserveOriginal
-
可选
默认值:
false
如果为
true
,则保留原始令牌:“thé” → “the”, “thé”
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="asciiFolding" preserveOriginal="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizer"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false" />
</analyzer>
输入: “á”(Unicode 字符 00E1)
输出: “a”(ASCII 字符 97)
Beider-Morse 过滤器
实现 Beider-Morse 语音匹配 (BMPM) 算法,该算法允许识别相似的名称,即使它们的拼写不同或使用不同的语言。有关此工作原理的更多信息,请参见Beider-Morse 语音匹配部分。
由于更新到 BMPM 算法的 3.04 版本,BeiderMorseFilter 在 Solr 5.0 中更改了其行为。旧版本的 Solr 实现了 BMPM 3.00 版本(请参阅http://stevemorse.org/phoneticinfo.htm)。使用此过滤器通过早期版本的 Solr 构建的任何索引都需要重建。 |
工厂类: solr.BeiderMorseFilterFactory
参数
nameType
-
可选
默认值:
GENERIC
名称类型。有效值为
GENERIC
、ASHKENAZI
或SEPHARDIC
。如果不处理阿什肯纳兹或塞法迪名称,请使用GENERIC
。 ruleType
-
可选
默认值:
APPROX
要应用的规则类型。有效值为
APPROX
或EXACT
。 concat
-
可选
默认值:
true
定义是否应使用管道符 (
|
) 合并多个可能的匹配项。 languageSet
-
可选
默认值:
auto
要使用的语言集。值
auto
将允许过滤器识别语言,或者可以提供逗号分隔的列表。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="beiderMorse" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.BeiderMorseFilterFactory" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
经典过滤器
此过滤器采用经典分词器的输出,并从首字母缩写词中删除句点,并从所有格中删除“'s”。
工厂类: solr.ClassicFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="classic"/>
<filter name="classic"/>
</analyzer>
<analyzer>
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.ClassicFilterFactory"/>
</analyzer>
输入: “I.B.M. cat’s can’t”
分词器到过滤器: “I.B.M”, “cat’s”, “can’t”
输出: “IBM”, “cat”, “can’t”
常用语法过滤器
此过滤器用于 index
时间分析,它通过将常用令牌(例如停用词)与常规令牌组合来创建单词词组。这可能会导致索引具有更多唯一的术语,但对于创建包含常用词(例如“the cat”)的短语查询非常有用,其速度通常比不使用组合令牌快得多,因为只需要考虑按顺序包含两个术语的文档的术语位置。正确的使用需要与 query
分析期间的 常用语法查询过滤器配对。
这些过滤器还可以与 停用词过滤器结合使用,因此搜索 "the cat"
将匹配不同的文档,然后搜索 "a cat"
,而病态搜索 "the"
或 "a"
将不会匹配任何文档。
工厂类: solr.CommonGramsFilterFactory
参数
words
-
必需
默认值:无
.txt 格式的常用词文件的名称,例如
stopwords.txt
。 format
-
可选
默认值:无
如果停用词列表已为 Snowball 格式化,您可以指定
format="snowball"
,以便 Solr 可以读取停用词文件。 ignoreCase
-
可选
默认值:
false
如果为
true
,则过滤器在将单词与常用词文件进行比较时会忽略单词的大小写。
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="commonGrams" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="commonGramsQuery" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
输入: “the cat in the hat”
分词器到过滤器: “the”, “cat”, “in”, “the”, “hat”
(索引)输出: “the”(1), “the_cat”(1), “cat”(2), “cat_in”(2), “in”(3), “in_the”(3), “the”(4), “the_hat”(4), “hat”(5)
(查询)输出: “the_cat”(1), “cat_in”(2), “in_the”(3), “the_hat”(4)
常用语法查询过滤器
此过滤器用于 常用语法过滤器 的 query
时间分析方面 — 有关参数、示例配置和示例输入/输出的描述,请参见该过滤器。
排序键过滤器
排序允许以语言敏感的方式对文本进行排序。它通常用于排序,但也可以用于高级搜索。我们已经在 Unicode 排序部分中更详细地介绍了这一点。
Daitch-Mokotoff Soundex 过滤器
实现 Daitch-Mokotoff Soundex 算法,该算法允许识别相似的名称,即使它们的拼写不同。有关此工作原理的更多信息,请参见语音匹配部分。
工厂类: solr.DaitchMokotoffSoundexFilterFactory
参数
inject
-
可选
默认值:
true
如果为
true
,则将新的语音令牌添加到流中。否则,令牌将替换为语音等效项。将此设置为false
将启用语音匹配,但目标词的精确拼写可能不匹配。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="daitchMokotoffSoundex" inject="true"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DaitchMokotoffSoundexFilterFactory" inject="true"/>
</analyzer>
双重 Metaphone 过滤器
此过滤器使用来自 commons-codec 的 DoubleMetaphone
编码算法创建令牌。有关更多信息,请参见语音匹配。
工厂类: solr.DoubleMetaphoneFilterFactory
参数
inject
-
可选
默认值:
true
如果为
true
,则将新的语音令牌添加到流中。否则,令牌将替换为语音等效项。将此设置为false
将启用语音匹配,但目标词的精确拼写可能不匹配。 maxCodeLength
-
可选
默认值:无
要生成的代码的最大长度。
示例
inject 的默认行为(true
):保留原始令牌并在同一位置添加语音令牌。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DoubleMetaphoneFilterFactory"/>
</analyzer>
输入: “four score and Kuczewski”
分词器到过滤器: “four”(1), “score”(2), “and”(3), “Kuczewski”(4)
输出: “four”(1), “FR”(1), “score”(2), “SKR”(2), “and”(3), “ANT”(3), “Kuczewski”(4), “KSSK”(4), “KXFS”(4)
语音令牌的位置增量为 0,表示它们与它们派生的令牌(紧接在前面的)位于同一位置。请注意,“Kuczewski”有两个编码,它们添加在同一位置。
示例
丢弃原始令牌(inject="false"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone" inject="false"/>
</analyzer>
输入: “four score and Kuczewski”
分词器到过滤器: “four”(1), “score”(2), “and”(3), “Kuczewski”(4)
输出: “FR”(1), “SKR”(2), “ANT”(3), “KSSK”(4), “KXFS”(4)
请注意,“Kuczewski”有两个编码,它们添加在同一位置。
分隔符提升过滤器
此过滤器向令牌添加数字浮点提升值,按分隔符字符拆分。
工厂类: solr.DelimitedBoostTokenFilterFactory
参数
delimiter
-
可选
默认值:
|
(竖线符号)用于分隔令牌和提升的字符。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DelimitedBoostTokenFilterFactory"/>
</analyzer>
输入: “leopard|0.5 panthera uncia|0.9”
分词器到过滤器: “leopard|0.5”(1), “panthera”(2), “uncia|0.9”(3)
输出: “leopard”(1)[0.5], “panthera”(2), “uncia”(3)[0.9]
方括号中的数字浮点是浮点令牌提升属性。
示例
使用不同的分隔符 (delimiter="/"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost" delimiter="/"/>
</analyzer>
输入: “leopard/0.5 panthera uncia/0.9”
分词器到过滤器: “leopard/0.5”(1), “panthera”(2), “uncia/0.9”(3)
输出: “leopard”(1)[0.5], “panthera”(2), “uncia”(3)[0.9]
注意: 请确保分隔符与您使用的分词器兼容
边缘 N 元语法过滤器
此过滤器生成给定范围内大小的边缘 N 元语法令牌。
工厂类: solr.EdgeNGramFilterFactory
参数
minGramSize
-
必需
默认值:无
最小语法大小,必须 > 0。
maxGramSize
-
必需
默认值:无
最大语法大小,必须 >=
minGramSize
。 preserveOriginal
-
可选
默认值:
false
如果为
true
,即使原始术语短于minGramSize
或长于maxGramSize
,也保留原始术语。
示例
默认行为。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="1"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="1"/>
</analyzer>
输入: “four score and twenty”
分词器到过滤器: “four”, “score”, “and”, “twenty”
输出: “f”, “s”, “a”, “t”
示例
范围为 1 到 4。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “f”, “fo”, “fou”, “four”, “s”, “sc”, “sco”, “scor”
示例
范围为 4 到 6。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="4" maxGramSize="6"/>
</analyzer>
输入: “four score and twenty”
分词器到过滤器: “four”, “score”, “and”, “twenty”
输出: “four”, “scor”, “score”, “twen”, “twent”, “twenty”
示例
保留原始术语。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “fo”, “fou”, “four”, “sc”, “sco”, “score”
英语最小词干过滤器
此过滤器将英语复数词提取为单数形式。
工厂类: solr.EnglishMinimalStemFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="englishMinimalStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
输入: “dogs cats”
分词器到过滤器: “dogs”, “cats”
输出: “dog”, “cat”
英语所有格过滤器
此过滤器从单词中删除单数所有格(尾部的 's)。请注意,复数所有格,例如“divers' snorkels”中的 s',不会被此过滤器删除。
工厂类: solr.EnglishPossessiveFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="englishPossessive"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
输入: “Man’s dog bites dogs' man”
分词器到过滤器: “Man’s”, “dog”, “bites”, “dogs'”, “man”
输出: “Man”, “dog”, “bites”, “dogs'”, “man”
指纹过滤器
此过滤器输出一个令牌,该令牌是已排序和去重的输入令牌集合的串联。这对于聚类/链接用例非常有用。
工厂类: solr.FingerprintFilterFactory
参数
separator
-
可选
默认值:空格字符
用于分隔组合成单个输出标记的各个标记的字符。
maxOutputTokenSize
-
可选
默认值:
1024
汇总输出标记的最大长度。如果超出此长度,则不会发出任何输出标记。
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="fingerprint" separator="_" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.FingerprintFilterFactory" separator="_" />
</analyzer>
输入: "the quick brown fox jumped over the lazy dog"
分词器到过滤器: "the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"
输出: "brown_dog_fox_jumped_lazy_over_quick_the"
Hunspell词干提取过滤器
Hunspell 词干提取过滤器
为多种语言提供支持。您必须为要与 Hunspell 词干提取过滤器一起使用的每种语言提供字典 (.dic
) 和规则 (.aff
) 文件。您可以在此处下载这些语言文件。
请注意,您的结果将根据提供的字典和规则文件的质量而有很大差异。例如,某些语言只有最少的单词列表,没有形态信息。另一方面,对于没有词干提取器但确实有大量字典文件的语言,Hunspell 词干提取器可能是一个不错的选择。
工厂类: solr.HunspellStemFilterFactory
参数
dictionary
-
必需
默认值:无
字典文件的路径。
affix
-
必需
默认值:无
规则文件的路径。
ignoreCase
-
可选
默认值:
false
控制匹配是否区分大小写。
longestOnly
-
可选
默认值:
false
如果为
true
,则只发出最长的词条。 strictAffixParsing
-
可选
默认值:
true
控制词缀解析是否严格。如果为
true
,则读取词缀规则时出现错误会导致 ParseException,否则将被忽略。
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hunspellStem"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HunspellStemFilterFactory"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
输入: "jump jumping jumped"
分词器到过滤器: "jump", "jumping", "jumped"
输出: "jump", "jump", "jump"
连字符单词过滤器
此过滤器会重建由于换行符或字段测试中其他中间空格而分词为两个标记的连字符单词。如果标记以连字符结尾,则会将其与后续标记连接,并丢弃连字符。
请注意,为了使此过滤器正常工作,上游分词器不得删除尾随的连字符字符。此过滤器通常仅在索引时有用。
工厂类: solr.HyphenatedWordsFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hyphenatedWords"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
</analyzer>
输入: "A hyphen- ated word"
分词器到过滤器: "A", "hyphen-", "ated", "word"
输出: "A", "hyphenated", "word"
ICU 折叠过滤器
此过滤器是一种自定义的 Unicode 规范化形式,除了 ICU Normalizer 2 过滤器中所述的 NFKC_Casefold
规范化形式之外,还应用了 Unicode TR #30:字符折叠中指定的折叠。此过滤器是 ASCII 折叠过滤器、小写过滤器和 ICU Normalizer 2 过滤器的组合行为的更好替代品。
要使用此过滤器,您必须将额外的 .jar 添加到 Solr 的类路径中(如 安装插件部分中所述)。有关需要添加哪些 jar 的说明,请参阅 solr/modules/analysis-extras/README.md
。
工厂类: solr.ICUFoldingFilterFactory
参数
filter
-
可选
默认值:无
可用于例如排除一组字符不被处理的 Unicode 集过滤器。有关更多信息,请参阅 UnicodeSet javadocs。
不带过滤器的示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
使用过滤器排除瑞典语/芬兰语字符的示例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding" filter="[^åäöÅÄÖ]"/>
</analyzer>
有关此规范化形式的详细信息,请参阅 Unicode TR #30:字符折叠。
ICU Normalizer 2 过滤器
此过滤器根据 Unicode 标准附录 #15 中描述的五种 Unicode 规范化形式之一来规范化文本
-
NFC:(
name="nfc" mode="compose"
) 规范化形式 C,规范分解 -
NFD:(
name="nfc" mode="decompose"
) 规范化形式 D,规范分解,然后是规范组合 -
NFKC:(
name="nfkc" mode="compose"
) 规范化形式 KC,兼容性分解 -
NFKD:(
name="nfkc" mode="decompose"
) 规范化形式 KD,兼容性分解,然后是规范组合 -
NFKC_Casefold:(
name="nfkc_cf" mode="compose"
) 规范化形式 KC,带有额外的 Unicode 大小写折叠。使用 ICU Normalizer 2 过滤器是小写过滤器和 NFKC 规范化的性能更高的替代品。
工厂类: solr.ICUNormalizer2FilterFactory
参数
form
-
必需
默认值:
nfkc_cf
规范化形式的名称。有效选项为
nfc
、nfd
、nfkc
、nfkd
或nfkc_cf
。 mode
-
必需
默认值:
compose
Unicode 字符组合和分解的模式。有效选项为:
compose
或decompose
。 filter
-
可选
默认值:无
可用于例如排除一组字符不被处理的 Unicode 集过滤器。有关更多信息,请参阅 UnicodeSet javadocs。
使用 NFKC_Casefold 的示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUNormalizer2FilterFactory" form="nfkc_cf" mode="compose"/>
</analyzer>
使用过滤器排除瑞典语/芬兰语字符的示例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose" filter="[^åäöÅÄÖ]"/>
</analyzer>
有关这些规范化形式的详细信息,请参阅 Unicode 规范化形式。
要使用此过滤器,您必须将额外的 .jar 添加到 Solr 的类路径中(如 安装插件部分中所述)。有关需要添加哪些 jar 的说明,请参阅 solr/modules/analysis-extras/README.md
。
ICU 转换过滤器
此过滤器将 ICU 转换应用于文本。此过滤器仅支持 ICU 系统转换。不支持自定义规则集。
工厂类: solr.ICUTransformFilterFactory
参数
id
-
必需
默认值:无
您希望使用此过滤器应用的 ICU 系统转换的标识符。有关 ICU 系统转换的完整列表,请参阅http://demo.icu-project.org/icu-bin/translit?TEMPLATE_FILE=data/translit_rule_main.html。
direction
-
可选
默认值:
forward
ICU 转换的方向。有效选项为
forward
和reverse
。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuTransform" id="Traditional-Simplified"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Traditional-Simplified"/>
</analyzer>
有关 ICU 转换的详细信息,请参阅 http://userguide.icu-project.org/transforms/general。
要使用此过滤器,您必须将额外的 .jar 添加到 Solr 的类路径中(如 安装插件部分中所述)。有关需要添加哪些 jar 的说明,请参阅 solr/modules/analysis-extras/README.md
。
保留词过滤器
此过滤器会丢弃除给定单词列表中列出的标记之外的所有标记。这是停用词过滤器的逆过程。此过滤器对于为一组受限的词条构建专用索引非常有用。
工厂类: solr.KeepWordFilterFactory
参数
words
-
必需
默认值:无
包含保留单词列表的文本文件的路径,每行一个。将忽略空行和以
\#
开头的行。这可以是绝对路径,也可以是 Solrconf
目录中的简单文件名。 format
-
可选
默认值:无
如果保留词列表已针对 Snowball 格式化,您可以指定
format="snowball"
,以便 Solr 可以读取保留词文件。 ignoreCase
-
可选
默认值:
false
如果为
true
,则比较不区分大小写。如果此参数为 true,则假定单词文件仅包含小写单词。
示例
其中 keepwords.txt
包含
happy funny silly
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
</analyzer>
输入: "Happy, sad or funny"
分词器到过滤器: "Happy", "sad", "or", "funny"
输出: "funny"
示例
相同的 keepwords.txt
,不区分大小写
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt" ignoreCase="true"/>
</analyzer>
输入: "Happy, sad or funny"
分词器到过滤器: "Happy", "sad", "or", "funny"
输出: "Happy", "funny"
示例
在过滤保留词之前使用 LowerCaseFilterFactory,没有 ignoreCase
标志。
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
输入: "Happy, sad or funny"
分词器到过滤器: "Happy", "sad", "or", "funny"
过滤器到过滤器: "happy", "sad", "or", "funny"
输出: "happy", "funny"
KStem 过滤器
对于寻求不那么激进的词干提取器的开发人员来说,KStem 是 Porter 词干提取过滤器的替代品。KStem 由 Bob Krovetz 编写,由 Sergio Guzman-Lara(UMASS Amherst)移植到 Lucene。此词干提取器仅适用于英语文本。
工厂类: solr.KStemFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="kStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KStemFilterFactory"/>
</analyzer>
输入: "jump jumping jumped"
分词器到过滤器: "jump", "jumping", "jumped"
输出: "jump", "jump", "jump"
长度过滤器
此过滤器传递长度在指定的最小/最大限制内的标记。所有其他标记都将被丢弃。
工厂类: solr.LengthFilterFactory
参数
min
-
必需
默认值:无
最小标记长度。比此长度短的标记将被丢弃。
max
-
必需
默认值:无
最大标记长度。必须大于
min
。比此长度长的标记将被丢弃。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="length" min="3" max="7"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="7"/>
</analyzer>
输入: "turn right at Albuquerque"
分词器到过滤器: "turn", "right", "at", "Albuquerque"
输出: "turn", "right"
限制标记计数过滤器
此过滤器限制接受的标记数量,通常对索引分析很有用。
默认情况下,一旦达到限制,此过滤器就会忽略包装的 TokenStream
中的任何标记,这可能会导致在 incrementToken()
返回 false
之前调用 reset()
。对于大多数 TokenStream
实现,这应该是可以接受的,并且比消耗完整流更快。如果您正在包装需要消耗完整的标记流才能正常工作的 TokenStream
,请使用 consumeAllTokens="true"
选项。
工厂类: solr.LimitTokenCountFilterFactory
参数
maxTokenCount
-
必需
默认值:无
最大标记计数。达到此限制后,将丢弃标记。
consumeAllTokens
-
可选
默认值:
false
是否在达到最大标记计数后消耗(并丢弃)先前标记过滤器的标记。请参见上面的描述。
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="limitTokenCount" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
输入 "1 2 3 4 5 6 7 8 9 10 11 12"
分词器到过滤器 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
输出 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
限制标记偏移量过滤器
此过滤器将标记限制为配置的最大起始字符偏移量之前的标记。例如,这对于限制突出显示很有用。
默认情况下,一旦达到限制,此过滤器就会忽略包装的 TokenStream
中的任何标记,这可能会导致在 incrementToken()
返回 false
之前调用 reset()
。对于大多数 TokenStream
实现,这应该是可以接受的,并且比消耗完整流更快。如果您正在包装需要消耗完整的标记流才能正常工作的 TokenStream
,请使用 consumeAllTokens="true"
选项。
工厂类: solr.LimitTokenOffsetFilterFactory
参数
maxStartOffset
-
必需
默认值:无
最大标记起始字符偏移量。达到此限制后,将丢弃标记。
consumeAllTokens
-
可选
默认值:
false
是否在达到最大起始偏移量后消耗(并丢弃)先前标记过滤器的标记。请参见上面的描述。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenOffset" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenOffsetFilterFactory" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
输入: "0 2 4 6 8 A C E"
分词器到过滤器: "0", "2", "4", "6", "8", "A", "C", "E"
输出: "0", "2", "4", "6", "8", "A"
限制标记位置过滤器
此过滤器将标记限制为配置的最大标记位置之前的标记。
默认情况下,一旦达到限制,此过滤器就会忽略包装的 TokenStream
中的任何标记,这可能会导致在 incrementToken()
返回 false
之前调用 reset()
。对于大多数 TokenStream
实现,这应该是可以接受的,并且比消耗完整流更快。如果您正在包装需要消耗完整的标记流才能正常工作的 TokenStream
,请使用 consumeAllTokens="true"
选项。
工厂类: solr.LimitTokenPositionFilterFactory
参数
maxTokenPosition
-
必需
默认值:无
最大标记位置。达到此限制后,将丢弃标记。
consumeAllTokens
-
可选
默认值:
false
是否在达到最大起始偏移量后消耗(并丢弃)先前标记过滤器的标记。请参见上面的描述。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenPosition" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenPositionFilterFactory" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
输入 "1 2 3 4 5"
分词器到过滤器 "1", "2", "3", "4", "5"
输出 "1", "2", "3"
小写过滤器
将标记中的任何大写字母转换为等效的小写标记。所有其他字符保持不变。
工厂类: solr.LowerCaseFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
输入: "Down With CamelCase"
分词器到过滤器: "Down", "With", "CamelCase"
输出: "down", "with", "camelcase"
托管停用词过滤器
这是停用词过滤器工厂的专用版本,它使用从 REST API 管理的一组停用词。
参数
managed
-
必需
默认值:无
应该在托管 REST API 中用于此停用词集的名称。
示例: 通过此配置,单词集被命名为“english”,并且可以通过 /solr/collection_name/schema/analysis/stopwords/english
进行管理。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="managedStop" managed="english"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedStopFilterFactory" managed="english"/>
</analyzer>
有关示例输入/输出,请参阅 停用词过滤器。
托管同义词过滤器
这是 同义词过滤器 的特殊版本,它使用 通过 REST API 管理的同义词映射。
托管同义词过滤器已弃用
托管同义词过滤器已被弃用,取而代之的是托管同义词图过滤器,后者是支持多词同义词所必需的。 |
工厂类: solr.ManagedSynonymFilterFactory
有关参数和示例,请参阅下面的 同义词图过滤器。
托管同义词图过滤器
这是 同义词图过滤器 的特殊版本,它使用 通过 REST API 管理的同义词映射。
此过滤器映射单个或多个标记的同义词,生成完全正确的图形输出。此过滤器是托管同义词过滤器的替代品,后者为多标记同义词生成不正确的图形。
虽然此过滤器生成正确的标记图,但它无法正确使用输入标记图。 |
参数
managed
-
必需
默认值:无
应在托管 REST API 中用于此同义词映射的名称。
示例: 通过此配置,映射集被命名为“english”,并且可以通过 /solr/collection_name/schema/analysis/synonyms/english
进行管理。
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
</analyzer>
有关示例输入/输出,请参阅下面的 同义词图过滤器。
MinHash 过滤器
从流中的所有输入标记生成重复的随机固定数量的哈希标记。为此,它首先从其源使用所有输入标记。此过滤器通常前面会有一个 Shingle 过滤器,如下例所示。
每个输入标记都进行哈希处理。随后,通过与一组预先计算的哈希值组合,它被“重新哈希”hashCount
次。对于每个生成的哈希值,哈希空间被划分为 bucketCount
个存储桶。为每个存储桶生成最低的一组 hashSetSize
个哈希值(通常为一组)。
此过滤器为输入标记生成一种类型的签名或草图,可用于计算文档之间的 Jaccard 相似度。
参数
hashCount
-
可选
默认值:
1
要使用的哈希数。
bucketCount
-
可选
默认值:
512
要使用的存储桶数。
hashSetSize
-
可选
默认值:
1
每个存储桶中最低哈希值的集合大小。
withRotation
-
可选
默认值:请参阅描述
如果哈希存储桶为空,则从第一个具有值的前一个存储桶生成哈希值。如果
bucketCount
大于1
,则默认值为true
,否则为false
。
生成的哈希数取决于上面的选项。使用 withRotation
的默认设置,生成的哈希数为 hashCount
x bucketCount
x hashSetSize
⇒ 默认情况下为 512。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="icu"/>
<filter name="icuFolding"/>
<filter name="shingle" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter name="minHash" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
<analyzer>
<tokenizer class="solr.ICUTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter class="org.apache.lucene.analysis.minhash.MinHashFilterFactory" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
输入: “woof woof woof woof woof”
分词器到过滤器:“woof woof woof woof woof”
输出: “℁팽徭聙↝ꇁ홱杯”,“℁팽徭聙↝ꇁ홱杯”,“℁팽徭聙↝ꇁ홱杯”,…。. 总共 512 次
N-Gram 过滤器
生成给定范围内大小的 n-gram 标记。请注意,标记按位置排序,然后按 gram 大小排序。
工厂类: solr.NGramFilterFactory
参数
minGramSize
-
必需
默认值:无
最小语法大小,必须 > 0。
maxGramSize
-
必需
默认值:无
最大语法大小,必须 >=
minGramSize
。 preserveOriginal
-
可选
默认值:
false
如果为
true
,即使原始术语短于minGramSize
或长于maxGramSize
,也保留原始术语。
示例
默认行为。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="2"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="2"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “f”、“o”、“u”、“r”、“fo”、“ou”、“ur”、“s”、“c”、“o”、“r”、“e”、“sc”、“co”、“or”、“re”
示例
范围为 1 到 4。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “f”、“fo”、“fou”、“four”、“o”、“ou”、“our”、“u”、“ur”、“r”、“s”、“sc”、“sco”、“scor”、“c”、“co”、“cor”、“core”、“o”、“or”、“ore”、“r”、“re”、“e”
示例
范围为 3 到 5。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="3" maxGramSize="5"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “fou”、“four”、“our”、“sco”、“scor”、“score”、“cor”、“core”、“ore”
示例
保留原始术语。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
输入: “four score”
分词器到过滤器: “four”, “score”
输出: “fo”、“fou”、“ou”、“our”、“ur”、“four”、“sc”、“sco”、“co”、“cor”、“or”、“ore”、“re”、“score”
数值负载标记过滤器
此过滤器向与给定类型匹配的标记添加数值浮点负载值。有关标记类型和负载的更多信息,请参阅 org.apache.lucene.analysis.Token
类的 Javadoc。
工厂类: solr.NumericPayloadTokenFilterFactory
参数
payload
-
必需
默认值:无
将添加到所有匹配标记的浮点值。
typeMatch
-
必需
默认值:无
标记类型名称字符串。类型名称匹配的标记的负载将设置为上述浮点值。
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="numericPayload" payload="0.75" typeMatch="word"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.NumericPayloadTokenFilterFactory" payload="0.75" typeMatch="word"/>
</analyzer>
输入: “bing bang boom”
分词器到过滤器: “bing”、“bang”、“boom”
输出: “bing”[0.75]、“bang”[0.75]、“boom”[0.75]
模式替换过滤器
此过滤器将正则表达式应用于每个标记,对于匹配的标记,将给定的替换字符串替换为匹配的模式。不匹配的标记将保持不变地传递。
工厂类: solr.PatternReplaceFilterFactory
参数
pattern
-
必需
默认值:无
要根据
java.util.regex.Pattern
测试每个标记的正则表达式。 replacement
-
必需
默认值:无
要替换匹配模式的字符串。此字符串可能包含对正则表达式模式中捕获组的引用。请参阅
java.util.regex.Matcher
的 Javadoc。 replace
-
可选
默认值:
all
指示应替换标记中模式的所有出现 (
all
),还是仅替换第一个 (first
)。
示例
简单字符串替换
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="cat" replacement="dog"/>
</analyzer>
输入: “cat concatenate catycat”
分词器到过滤器: “cat”、“concatenate”、“catycat”
输出: “dog”、“condogenate”、“dogydog”
示例
字符串替换,仅第一次出现
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog" replace="first"/>
</analyzer>
输入: “cat concatenate catycat”
分词器到过滤器: “cat”、“concatenate”、“catycat”
输出: “dog”、“condogenate”、“dogycat”
示例
更复杂的模式,在替换中带有捕获组引用。以非数字字符开头并以数字结尾的标记将在数字前插入下划线。否则,标记将传递。
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="(\D+)(\d+)$" replacement="$1_$2"/>
</analyzer>
输入: “cat foo1234 9987 blah1234foo”
分词器到过滤器: “cat”、“foo1234”、“9987”、“blah1234foo”
输出: “cat”、“foo_1234”、“9987”、“blah1234foo”
语音过滤器
此过滤器使用 org.apache.commons.codec.language
包中的一种语音编码算法创建标记。有关更多信息,请参阅有关 语音匹配的部分。
工厂类: solr.PhoneticFilterFactory
参数
encoder
-
必需
默认值:无
要使用的编码器的名称。编码器名称必须是以下之一(不区分大小写)
inject
-
可选
默认值:
true
如果为
true
,则将新的语音标记添加到流中。否则,标记将被替换为语音等效项。将其设置为false
将启用语音匹配,但目标词的确切拼写可能不匹配。 maxCodeLength
-
可选
默认值:无
Metaphone 或 Double Metaphone 编码器生成的代码的最大长度。
示例
DoubleMetaphone 编码的默认行为。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
</analyzer>
输入: “four score and twenty”
分词器到过滤器: “four”(1)、“score”(2)、“and”(3)、“twenty”(4)
输出: “four”(1)、“FR”(1)、“score”(2)、“SKR”(2)、“and”(3)、“ANT”(3)、“twenty”(4)、“TNT”(4)
语音标记的位置增量为 0,这表示它们与它们派生的标记(紧随其后)位于同一位置。
示例
丢弃原始标记。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone" inject="false"/>
</analyzer>
输入: “four score and twenty”
分词器到过滤器: “four”(1)、“score”(2)、“and”(3)、“twenty”(4)
输出: “FR”(1)、“SKR”(2)、“ANT”(3)、“TWNT”(4)
示例
默认 Soundex 编码器。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="Soundex"/>
</analyzer>
输入: “four score and twenty”
分词器到过滤器: “four”(1)、“score”(2)、“and”(3)、“twenty”(4)
输出: “four”(1)、“F600”(1)、“score”(2)、“S600”(2)、“and”(3)、“A530”(3)、“twenty”(4)、“T530”(4)
Porter 词干过滤器
此过滤器应用 Porter 英语词干算法。结果类似于使用带 language="English"
参数的 Snowball Porter 词干分析器。但是,此词干分析器直接用 Java 编写,并非基于 Snowball。它不接受受保护的词列表,仅适用于英语文本。但是,它的基准测试表明它比英语 Snowball 词干分析器快四倍,因此可以提高性能。
工厂类: solr.PorterStemFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="porterStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory "/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
输入: "jump jumping jumped"
分词器到过滤器: "jump", "jumping", "jumped"
输出: "jump", "jump", "jump"
受保护的词项过滤器
此过滤器启用一种形式的有条件过滤:它仅将其包装的过滤器应用于未包含在受保护集合中的词项。
工厂类: solr.ProtectedTermFilterFactory
参数
protected
-
必需
默认值:无
包含受保护词项的文件的逗号分隔列表,每行一个。
wrappedFilters
-
必需
默认值:无
不区分大小写的
TokenFilterFactory
SPI 名称的逗号分隔列表(从工厂名称中删除尾随的(Token)FilterFactory
- 请参阅java.util.ServiceLoader 接口
)。每个过滤器名称必须是唯一的,因此如果需要多次指定同一过滤器,则必须向每个同名 SPI 过滤器添加不区分大小写的唯一-id
后缀(请注意,-id
后缀会在 SPI 查找之前被删除)。 ignoreCase
-
可选
默认值:
false
测试受保护的单词时忽略大小写。如果为
true
,则受保护列表应包含小写单词。
示例
除 protectedTerms.txt
中的词项外,所有词项均在 4 个字符处截断并转换为小写
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ProtectedTermFilterFactory"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
示例
此示例包含多个同名的包装过滤器,它们带有唯一的 -id
后缀。请注意,过滤器 SPI 名称和 -id
后缀均不区分大小写。
对于 protectedTerms.txt
中的词项以外的所有词项,都将添加同义词,反转词项,然后为反转的词项添加同义词
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="SynonymGraph-fwd,ReverseString,SynonymGraph-rev"
synonymgraph-FWD.synonyms="fwd-syns.txt"
synonymgraph-REV.synonyms="rev-syns.txt"/>
</analyzer>
删除重复标记过滤器
此过滤器删除流中重复的标记。只有当标记具有相同的文本和位置值时,才会被视为重复的标记。
由于位置必须相同,因此此过滤器可能无法按照用户基于其名称的预期执行操作。它是一个非常特殊的过滤器,仅在非常特定的情况下有用。为了简洁起见,它被这样命名,即使它可能具有误导性。
工厂类: solr.RemoveDuplicatesTokenFilterFactory
参数:无
示例
RemoveDuplicatesTokenFilterFactory
有用的一个示例是,在将同义词文件与词干分析器结合使用的情况下。在这些情况下,词干分析器和同义词过滤器都可能导致具有相同位置的完全相同的词项最终出现在流中,从而增加索引大小,而没有任何好处。
考虑 synonyms.txt
文件中的以下条目
Television, Televisions, TV, TVs
在以下配置中使用时
-
带名称
-
带类名(传统)
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="synonyms.txt"/>
<filter name="englishMinimalStem"/>
<filter name="removeDuplicates"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
输入: “Watch TV”
分词器到同义词过滤器: "Watch"(1) "TV"(2)
同义词过滤器到词干过滤器: "Watch"(1) "Television"(2) "Televisions"(2) "TV"(2) "TVs"(2)
词干过滤器到删除重复过滤器: "Watch"(1) "Television"(2) "Television"(2) "TV"(2) "TV"(2)
输出: "Watch"(1) "Television"(2) "TV"(2)
反向通配符过滤器
此过滤器反转词元,以提供更快的起始通配符和前缀查询。不带通配符的词元不会反转。
工厂类: solr.ReversedWildcardFilterFactory
参数
withOriginal
-
可选
默认值:
true
如果为
true
,则过滤器在相同位置生成原始词元和反向词元。如果为false
,则仅生成反向词元。 maxPosAsterisk
-
可选
默认值:
2
触发查询词反转的星号通配符 ('*') 的最大位置。星号位置高于此值的词不会反转。
maxPosQuestion
-
可选
默认值:
1
触发查询词反转的问号通配符 ('?') 的最大位置。要仅反转纯后缀查询(带有单个前导星号的查询),请将此值设置为 0,并将
maxPosAsterisk
设置为 1。 maxFractionAsterisk
-
可选
默认值:
0.0
如果星号 ('*') 位置小于查询词元长度的此分数,则会触发反转的附加参数。
minTrailing
-
可选
默认值:
2
最后一个通配符字符之后查询词元中尾随字符的最小数目。为了获得良好的性能,此值应设置为大于
1
的值。
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="reversedWildcard" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
输入: "*foo *bar"
分词器到过滤器: "*foo", "*bar"
输出: "oof*", "rab*"
Shingle 过滤器
此过滤器从词元流构造 shingles(词元 n 元语法)。它将一系列词元组合成一个词元。
工厂类: solr.ShingleFilterFactory
参数
minShingleSize
-
可选
默认值:
2
每个 shingle 的最小词元数。必须大于或等于
2
。 maxShingleSize
-
可选
默认值:
2
每个 shingle 的最大词元数。必须大于或等于
minShingleSize
。 outputUnigrams
-
可选
默认值:
true
如果为
true
,则每个单独的词元也包括在其原始位置。 outputUnigramsIfNoShingles
-
可选
默认值:
false
如果为
true
,则在没有 shingle 的情况下将输出单独的词元。 tokenSeparator
-
可选
默认值:空格字符
将相邻词元连接成 shingle 时使用的字符串。
fillerToken
-
可选
默认值:
_
(下划线)用于填充已删除的停用词的字符,以便保留位置增量。
示例
默认行为。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
输入: "To be, or what?"
分词器到过滤器: "To"(1), "be"(2), "or"(3), "what"(4)
输出: "To"(1), "To be"(1), "be"(2), "be or"(2), "or"(3), "or what"(3), "what"(4)
示例
shingle 大小为 4,不包括原始词元。
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle" maxShingleSize="4" outputUnigrams="false"/>
</analyzer>
输入: "To be, or not to be."
分词器到过滤器: "To"(1), "be"(2), "or"(3), "not"(4), "to"(5), "be"(6)
输出: "To be"(1), "To be or"(1), "To be or not"(1), "be or"(2), "be or not"(2), "be or not to"(2), "or not"(3), "or not to"(3), "or not to be"(3), "not to"(4), "not to be"(4), "to be"(5)
Snowball Porter 词干过滤器
此过滤器工厂实例化由 Snowball 生成的特定于语言的词干分析器。Snowball 是一个生成基于模式的词干分析器的软件包。这种类型的词干分析器不如基于表的词干分析器准确,但速度更快且复杂度更低。基于表的词干分析器的创建和维护需要大量的人工,因此通常是商业产品。
Solr 包含亚美尼亚语、巴斯克语、加泰罗尼亚语、丹麦语、荷兰语、英语、芬兰语、法语、德语、匈牙利语、意大利语、挪威语、葡萄牙语、罗马尼亚语、俄语、西班牙语、瑞典语和土耳其语的 Snowball 词干分析器。有关 Snowball 的更多信息,请访问 http://snowball.tartarus.org/。
StopFilterFactory
、CommonGramsFilterFactory
和 CommonGramsQueryFilterFactory
可以选择读取 Snowball 格式的停用词(在这些 FilterFactory 的配置中指定 format="snowball"
)。
工厂类: solr.SnowballPorterFilterFactory
参数
language
-
可选
默认值:
English
语言的名称,用于选择要使用的适当的 Porter 词干分析器。大小写很重要。此字符串用于在
org.tartarus.snowball.ext
类层次结构中选择一个包名称。 protected
-
必需
默认值:
protected
包含受保护单词列表的文本文件的路径,每行一个单词。受保护的单词将不会进行词干分析。忽略空行和以
\#
开头的行。这可以是绝对路径,也可以是 Solrconf
目录中的简单文件名。
示例
默认行为
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SnowballPorterFilterFactory"/>
</analyzer>
输入: "flip flipped flipping"
分词器到过滤器: "flip", "flipped", "flipping"
输出: "flip", "flip", "flip"
示例
法语词干分析器,英语单词
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="French"/>
</analyzer>
输入: "flip flipped flipping"
分词器到过滤器: "flip", "flipped", "flipping"
输出: "flip", "flipped", "flipping"
示例
西班牙语词干分析器,西班牙语单词
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="Spanish"/>
</analyzer>
输入: "cante canta"
分词器到过滤器: "cante", "canta"
输出: "cant", "cant"
停用词过滤器
此过滤器丢弃或停止分析给定停用词列表中的词元。Solr conf
目录中包含一个标准的停用词列表,名为 stopwords.txt
,它适用于典型的英语文本。
工厂类: solr.StopFilterFactory
参数
words
-
可选
默认值:无
包含停用词列表的文件的路径,每行一个停用词。忽略空行和以
\#
开头的行。这可以是绝对路径,也可以是相对于 Solrconf
目录的路径。 format
-
可选
默认值:无
如果停用词列表已为 Snowball 格式化,您可以指定
format="snowball"
,以便 Solr 可以读取停用词文件。 ignoreCase
-
可选
默认值:
false
在测试停用词时忽略大小写。如果为
true
,则停用词列表应包含小写单词。
示例
区分大小写的匹配,不停止大写的单词。词元位置跳过已停止的单词。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
</analyzer>
输入: "To be or what?"
分词器到过滤器: "To"(1), "be"(2), "or"(3), "what"(4)
输出: "To"(1), "what"(4)
示例
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
输入: "To be or what?"
分词器到过滤器: "To"(1), "be"(2), "or"(3), "what"(4)
输出: "what"(4)
建议停用词过滤器
与 停用词过滤器 类似,此过滤器会丢弃或停止分析给定停用词列表中的词元。
建议停用词过滤器与停用词过滤器的不同之处在于,它不会删除最后一个词元,除非该词元后跟一个词元分隔符。例如,查询 "find the"
将保留 'the'
,因为它后面没有空格、标点符号等,并将其标记为 KEYWORD
,以便后续过滤器不会更改或删除它。
相比之下,像 “find the popsicle” 这样的查询会删除 ‘the’ 作为停用词,因为它后面跟一个空格。当使用其中一个分析建议器时,您通常会在索引分析器中使用普通的 StopFilterFactory
,然后在查询分析器中使用 SuggestStopFilter。
工厂类: solr.SuggestStopFilterFactory
参数
words
-
可选
要解析的停用词文件的名称。
format
-
可选
默认值:
wordset
定义如何解析单词文件。如果未指定
words
,则不得指定format
。format
参数的有效值是-
wordset
:支持每行一个单词(包括任何单词内空格),并允许以\#
字符开头的整行注释。忽略空行。 -
snowball
:允许每行指定多个单词,并且可以使用竖线 (|
) 指定尾随注释。忽略空行。
-
ignoreCase
-
可选
默认值:
false
如果为
true
,则匹配不区分大小写。
示例
-
带名称
-
带类名(传统)
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="lowercase"/>
<filter name="suggestStop" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SuggestStopFilterFactory" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
输入: "The The"
分词器到过滤器: "the"(1), "the"(2)
输出: "the"(2)
同义词过滤器
此过滤器执行同义词映射。在同义词列表中查找每个词元,如果找到匹配项,则会发出同义词来代替该词元。新词元的位置值设置为使它们都与原始词元位于相同的位置。
同义词过滤器已弃用
同义词过滤器已被弃用,转而支持同义词图过滤器,该过滤器是多词元同义词支持所必需的。 |
工厂类: solr.SynonymFilterFactory
有关参数和示例,请参阅下面的同义词图过滤器。
同义词图过滤器
此过滤器映射单个或多个词元同义词,生成完全正确的图输出。此过滤器是同义词过滤器的替代品,同义词过滤器为多词元同义词生成不正确的图。
如果在索引期间使用此过滤器,则必须在其后跟一个展平图过滤器,以便像同义词过滤器一样将词元压缩到彼此之上,因为索引器无法直接使用图。要使同义词替换为多个词元时获得完全正确的位置查询,您应该改为在查询时使用此过滤器应用同义词。
虽然此过滤器生成正确的标记图,但它无法正确使用输入标记图。 |
工厂类: solr.SynonymGraphFilterFactory
参数
synonyms
-
必需
默认值:无
包含同义词列表的文件的路径,每行一个同义词。在(默认)
solr
格式中 - 有关替代方案,请参阅下面的format
参数 - 忽略空行和以\#
开头的行。这可以是逗号分隔的路径列表。有关更多信息,请参阅 资源加载。有两种方法可以指定同义词映射
-
以逗号分隔的单词列表。如果词元与任何单词匹配,则将替换列表中的所有单词,这将包括原始词元。
-
两个以逗号分隔的单词列表,它们之间使用符号 "=>"。如果词元与左侧的任何单词匹配,则将替换右侧的列表。除非原始词元也在右侧列表中,否则它不会被包括在内。
-
ignoreCase
-
可选
默认值:
false
如果为
true
,则同义词匹配将不区分大小写。 expand
-
可选
默认值:
true
如果为
true
,则同义词将扩展到所有等效同义词。如果为false
,则所有等效同义词将缩减为列表中的第一个。 format
-
可选
默认值:
solr
控制如何解析同义词。支持短名称
solr
(用于SolrSynonymParser
)和wordnet
(用于WordnetSynonymParser
)。您也可以提供您自己的SynonymMap.Builder
子类的名称。 tokenizerFactory
-
可选
默认值:
WhitespaceTokenizerFactory
解析同义词文件时要使用的分词器工厂的名称。名称前缀为
tokenizerFactory.*
的参数将作为初始化参数提供给指定的分词器工厂。任何未被同义词过滤器工厂使用的参数,包括那些没有
tokenizerFactory.*
前缀的参数,也将作为初始化参数提供给分词器工厂。如果指定了
tokenizerFactory
,则不能指定analyzer
,反之亦然。 analyzer
-
可选
默认值:
WhitespaceTokenizerFactory
解析同义词文件时要使用的分析器类的名称。如果指定了
analyzer
,则不能指定tokenizerFactory
,反之亦然。
在以下示例中,假设一个名为 mysynonyms.txt
的同义词文件
couch,sofa,divan
teh => the
huge,ginormous,humungous => large
small => tiny,teeny,weeny
示例
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
</analyzer>
输入: "teh small couch"
分词器到过滤器: "teh"(1), "small"(2), "couch"(3)
输出: "the"(1), "tiny"(2), "teeny"(2), "weeny"(2), "couch"(3), "sofa"(3), "divan"(3)
示例
输入: "teh ginormous, humungous sofa"
分词器到过滤器: "teh"(1), "ginormous"(2), "humungous"(3), "sofa"(4)
输出: "the"(1), "large"(2), "large"(3), "couch"(4), "sofa"(4), "divan"(4)
加权同义词
将 DelimitedBoostFilter 与 Synonym Graph Filter 结合使用,您可以在查询时实现加权同义词。有关更多信息,请参阅:https://sease.io/2020/03/introducing-weighted-synonyms-in-apache-lucene.html 对于以下示例,假设一个名为 boostedSynonyms.txt
的同义词文件
leopard, big cat|0.8, bagheera|0.9, panthera pardus|0.85
lion => panthera leo|0.9, simba|0.8, kimba|0.75
示例
带名称
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="boostedSynonyms.txt"/>
<filter name="delimitedBoost"/>
</analyzer>
输入: "lion"
分词器到过滤器: "lion"(1)
输出: "panthera"(1), "leo"(2)[0.9], "simba"(1)[0.8], "kimba"(1)[0.75]
Token Offset Payload Filter
此过滤器将标记的数字字符偏移量添加为该标记的有效负载值。
工厂类: solr.TokenOffsetPayloadTokenFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="tokenOffsetPayload"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TokenOffsetPayloadTokenFilterFactory"/>
</analyzer>
输入: “bing bang boom”
分词器到过滤器: “bing”、“bang”、“boom”
输出: "bing"[0,4], "bang"[5,9], "boom"[10,14]
Trim Filter
此过滤器修剪标记开头和/或结尾的空格。大多数分词器在空格处分割标记,因此此过滤器最常用于特殊情况。
工厂类: solr.TrimFilterFactory
参数:无
示例
此处使用的 PatternTokenizerFactory 配置在简单的逗号上分割输入,它不会删除空格。
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="pattern" pattern=","/>
<filter name="trim"/>
</analyzer>
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern=","/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
输入: "one, two , three ,four "
分词器到过滤器: "one", " two ", " three ", "four "
输出: "one", "two", "three", "four"
Type As Payload Filter
此过滤器将标记的类型作为编码的字节序列添加到其有效负载中。
工厂类: solr.TypeAsPayloadTokenFilterFactory
参数:无
示例
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="typeAsPayload"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TypeAsPayloadTokenFilterFactory"/>
</analyzer>
输入: "Pay Bob’s I.O.U."
分词器到过滤器: "Pay", "Bob’s", "I.O.U."
输出: "Pay"[<ALPHANUM>], "Bob’s"[<APOSTROPHE>], "I.O.U."[<ACRONYM>]
Type As Synonym Filter
此过滤器将标记的类型添加为与该标记位置相同的标记,可以选择添加可配置的前缀。
工厂类: solr.TypeAsSynonymFilterFactory
参数
prefix
-
可选
默认值:无
要添加到标记类型的前缀。
ignore
-
可选
默认值:无
要忽略且不转换为同义词的类型的逗号分隔列表。
synFlagsMask
-
可选
默认值:参见描述
用于控制哪些标志传播到同义词的掩码(以整数形式提供)。默认值是整数
-1
,即掩码0xFFFFFFFF
- 此掩码按原样传播任何标志。
示例
在下面的示例中,每个标记的类型将按原样在相同位置发出
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="standard"/>
<filter name="typeAsSynonym"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory"/>
</analyzer>
在下面的示例中,对于类型为 <URL>
的标记 "example.com",在相同位置发出的标记将是 "_type_<URL>"
-
带名称
-
带类名(传统)
<analyzer>
<tokenizer name="uax29URLEmail"/>
<filter name="typeAsSynonym" prefix="_type_"/>
</analyzer>
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory" prefix="_type_"/>
</analyzer>
Type Token Filter
此过滤器拒绝或允许指定标记类型列表,假设标记具有与其关联的类型元数据。例如,UAX29 URL Email Tokenizer 发出类型为 "<URL>" 和 "<EMAIL>" 的标记,以及其他类型。如果需要,此过滤器允许您仅从文本中提取电子邮件地址作为标记。
工厂类: solr.TypeTokenFilterFactory
参数
types
-
必需
默认值:无
定义要过滤的类型的文件路径。
useWhitelist
-
可选
默认值:
false
如果为
true
,则应将types
中定义的文件用作包含列表。如果为false
或未定义,则将types
中定义的文件用作拒绝列表。
示例
-
带名称
-
带类名(传统)
<analyzer>
<filter name="typeToken" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
<analyzer>
<filter class="solr.TypeTokenFilterFactory" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
Word Delimiter Filter
此过滤器在单词分隔符处分割标记。
单词分隔符过滤器已弃用
单词分隔符过滤器已被弃用,取而代之的是单词分隔符图过滤器,该过滤器需要生成正确的标记图,以便例如,短语查询可以正确工作。 |
工厂类: solr.WordDelimiterFilterFactory
有关完整描述,包括参数和示例,请参阅下面的单词分隔符图过滤器。
Word Delimiter Graph Filter
此过滤器在单词分隔符处分割标记。
如果您在索引期间使用此过滤器,则必须在其后跟一个展平图过滤器,以像单词分隔符过滤器一样将标记压缩在一起,因为索引器不能直接使用图。要在分割标记时获得完全正确的位置查询,您应该在查询时使用此过滤器。
注意:虽然此过滤器会生成正确的标记图,但它无法正确使用输入标记图。
确定分隔符的规则如下
-
单词内的大小写更改:"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.WordDelimiterGraphFilterFactory
参数
generateWordParts
-
可选
默认值:
1
如果非零,则在分隔符处分割单词。例如:"CamelCase", "hot-spot" → "Camel", "Case", "hot", "spot"
generateNumberParts
-
可选
默认值:
1
如果非零,则在分隔符处分割数字字符串:"1947-32" → *"1947", "32"
splitOnCaseChange
-
可选
默认值:
1
如果为
0
,则单词不会在驼峰式大小写更改时分割:"BugBlaster-XL" → "BugBlaster", "XL"。下面的示例 1 说明了默认的(非零)分割行为。 splitOnNumerics
-
可选
默认值:
1
如果为
0
,则不在从字母到数字的过渡处分割单词:"FemBot3000" → "Fem", "Bot3000" catenateWords
-
可选
默认值:
0
如果非零,则将加入单词部分的最大运行:"hot-spot-sensor’s" → "hotspotsensor"
catenateNumbers
-
可选
默认值:
0
如果非零,则将加入数字部分的最大运行:1947-32" → "194732"
catenateAll
-
可选
默认值:
0
如果非零,则将加入单词和数字部分的运行:"Zap-Master-9000" → "ZapMaster9000"
preserveOriginal
-
可选
默认值:
0
如果非零,则保留原始标记:"Zap-Master-9000" → "Zap-Master-9000", "Zap", "Master", "9000"
protected
-
可选
默认值:无
包含应在不分割的情况下传递的受保护单词列表的文件路径。
stemEnglishPossessive
-
可选
默认值:
1
如果为
1
,则从每个子词中删除所有格's
。 adjustOffsets
-
可选
默认值:
true
如果为
true
,则调整部分术语的偏移量。 types
-
可选
默认值:无
包含 字符 => 类型 映射的文件路径,这可以自定义此过滤器的分割行为。识别的字符类型:
LOWER
、UPPER
、ALPHA
、DIGIT
、ALPHANUM
和SUBWORD_DELIM
。任何没有自定义映射的字符的默认行为都是从 Unicode 字符属性计算得出的。忽略以 '#' 开头的空白行和注释行。示例文件
# Don't split numbers at '$', '.' or ',' $ => DIGIT . => DIGIT \u002C => DIGIT # Don't split on ZWJ: https://en.wikipedia.org/wiki/Zero-width_joiner \u200D => ALPHANUM
示例
默认行为。此处使用空格分词器来保留非字母数字字符。
-
带名称
-
带类名(传统)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
</analyzer>
输入: "hot-spot RoboBlaster/9000 100XL"
分词器到过滤器: "hot-spot", "RoboBlaster/9000", "100XL"
输出: "hot", "spot", "Robo", "Blaster", "9000", "100", "XL"
示例
不要在大小写更改时分割,并且不要生成数字部分。请注意,通过不生成数字部分,最终会丢弃仅包含数字部分的标记。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" generateNumberParts="0" splitOnCaseChange="0"/>
</analyzer>
输入: "hot-spot RoboBlaster/9000 100-42"
分词器到过滤器: "hot-spot", "RoboBlaster/9000", "100-42"
输出: "hot", "spot", "RoboBlaster", "9000"
示例
连接单词部分和数字部分,但不连接在同一标记中出现的单词和数字部分。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateWords="1" catenateNumbers="1"/>
</analyzer>
输入: "hot-spot 100+42 XL40"
分词器到过滤器: "hot-spot"(1), "100+42"(2), "XL40"(3)
输出: "hot"(1), "spot"(2), "hotspot"(2), "100"(3), "42"(4), "10042"(4), "XL"(5), "40"(6)
示例
连接全部。单词和/或数字部分被连接在一起。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateAll="1"/>
</analyzer>
输入: "XL-4000/ES"
分词器到过滤器: "XL-4000/ES"(1)
输出: "XL"(1), "4000"(2), "ES"(3), "XL4000ES"(3)
示例
使用包含 "AstroBlaster" 和 "XL-5000"(以及其他)的受保护单词列表。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" protected="protwords.txt"/>
</analyzer>
输入: "FooBar AstroBlaster XL-5000 ==ES-34-"
分词器到过滤器: "FooBar", "AstroBlaster", "XL-5000", "==ES-34-"
输出: "FooBar", "FooBar", "AstroBlaster", "XL-5000", "ES", "34"