过滤器
过滤器检查一个标记流,并根据所使用的过滤器类型保留、转换或丢弃它们。
关于过滤器
与标记器类似,过滤器消耗输入并生成一个标记流。过滤器还派生自org.apache.lucene.analysis.TokenStream
,但与标记器不同,过滤器的输入是另一个 TokenStream。过滤器的任务通常比标记器的任务更容易,因为在大多数情况下,过滤器按顺序查看流中的每个标记,并决定是传递、替换还是丢弃它。
过滤器还可以通过展望来考虑多个令牌来进行更复杂的分析,尽管这不太常见。这种过滤器的假设用途之一可能是规范化将标记为两个单词的状态名称。例如,单个令牌“california”将替换为“CA”,而令牌对“rhode”后跟“island”将变为单个令牌“RI”。
由于过滤器会消耗一个 TokenStream
并生成一个新的 TokenStream
,因此它们可以无限地一个接一个地链接在一起。链中的每个过滤器依次处理其前身生成的令牌。因此,指定过滤器的顺序很重要。通常,首先执行最通用的筛选,而后续的筛选阶段则更加专门。
过滤器配置
过滤器在 schema 文件中配置为 <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
。如果不处理 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”
通用语法过滤器
此过滤器用于索引
时间分析,通过将通用标记(例如停用词)与常规标记相结合来创建单词分片。这可能会导致索引具有更多唯一术语,但对于创建包含通用词的短语查询(例如“the cat”)很有用,这种方式通常比不使用组合标记快得多,因为只需要考虑同时包含两个术语的文档的术语位置。正确使用需要在查询
分析期间与通用语法查询过滤器配对。
这些过滤器还可以与停用过滤器结合使用,因此搜索“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)
通用语法查询过滤器
此过滤器用于通用语法过滤器的查询
时间分析方面——请参阅该过滤器以了解参数、示例配置和示例输入/输出的说明。
排序键过滤器
排序允许以语言敏感的方式对文本进行排序。它通常用于排序,但也可以用于高级搜索。我们在Unicode 排序部分中更详细地介绍了这一点。
Daitch-Mokotoff Soundex 过滤器
实现 Daitch-Mokotoff Soundex 算法,该算法允许识别相似的名称,即使它们拼写不同。有关此工作原理的更多信息,请参阅音素匹配部分。
工厂类:solr.DaitchMokotoffSoundexFilterFactory
参数
注入
-
可选
默认值:
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>
双元音素过滤器
此过滤器使用DoubleMetaphone
编码算法从 commons-codec 创建标记。有关更多信息,请参阅音素匹配。
工厂类:solr.DoubleMetaphoneFilterFactory
参数
注入
-
可选
默认值:
true
如果为
true
,则会向流中添加新的音素标记。否则,标记将替换为音素等效项。将其设置为false
将启用音素匹配,但目标单词的确切拼写可能不匹配。 maxCodeLength
-
可选
默认值:无
要生成的代码的最大长度。
示例
注入的默认行为(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
参数
分隔符
-
可选
默认:
|
(竖线符号)用于分隔标记和提升的字符。
示例
带名称
<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-Gram 过滤器
此过滤器生成给定范围内大小的边缘 n-gram 标记。
工厂类:solr.EdgeNGramFilterFactory
参数
minGramSize
-
必需
默认值:无
最小 gram 大小,必须 > 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"
扁平化图形筛选器
此筛选器必须包含在索引时分析器规范中,其中至少包含一个图形感知筛选器,包括同义词图形筛选器和单词分隔符图形筛选器。
工厂类:solr.FlattenGraphFilterFactory
参数:无
请参阅 同义词图形筛选器 和 单词分隔符图形筛选器 下面的示例。
Hunspell 词干筛选器
Hunspell Stem Filter
支持多种语言。您必须为希望与 Hunspell Stem Filter 一起使用的每种语言提供词典 (.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 规范化形式,它应用了 Unicode TR #30:字符折叠 中指定的折叠,此外还应用了 ICU Normalizer 2 过滤器 中描述的 NFKC_Casefold
规范化形式。此过滤器可以更好地替代 ASCII 折叠过滤器、小写过滤器 和 ICU Normalizer 2 过滤器 的组合行为。
要使用此过滤器,您必须向 Solr 的类路径中添加其他 .jar(如部分 安装插件 中所述)。有关需要添加的 jar 的说明,请参阅 solr/modules/analysis-extras/README.md
。
工厂类: solr.ICUFoldingFilterFactory
参数
过滤器
-
可选
默认值:无
Unicode 集过滤器,可用于(例如)排除一组字符进行处理。有关详细信息,请参阅 UnicodeSet javadoc。
无过滤器的示例
带名称
<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
参数
形式
-
必需
默认值:
nfkc_cf
规范化形式的名称。有效选项包括
nfc
、nfd
、nfkc
、nfkd
或nfkc_cf
。 模式
-
必需
默认值:
compose
Unicode 字符合成和分解的模式。有效选项包括:
compose
或decompose
。 过滤器
-
可选
默认值:无
Unicode 集过滤器,可用于(例如)排除一组字符进行处理。有关详细信息,请参阅 UnicodeSet javadoc。
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 规范化形式。
要使用此过滤器,您必须向 Solr 的类路径中添加其他 .jar(如部分 安装插件 中所述)。有关需要添加的 jar 的说明,请参阅 solr/modules/analysis-extras/README.md
。
ICU Transform 过滤器
此过滤器将 ICU Transforms 应用于文本。此过滤器仅支持 ICU 系统转换。不支持自定义规则集。
工厂类: solr.ICUTransformFilterFactory
参数
ID
-
必需
默认值:无
您希望使用此过滤器应用的 ICU 系统转换的标识符。有关 ICU 系统转换的完整列表,请参阅 http://demo.icu-project.org/icu-bin/translit?TEMPLATE_FILE=data/translit_rule_main.html。
方向
-
可选
默认值:
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。
要使用此过滤器,您必须向 Solr 的类路径中添加其他 .jar(如部分 安装插件 中所述)。有关需要添加的 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(马萨诸塞大学阿默斯特分校)移植到 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
,该 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>
In "1 2 3 4 5 6 7 8 9 10 11 12"
要过滤的标记器 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
Out "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
限制令牌偏移量过滤器
此过滤器将令牌限制为配置的最大起始字符偏移量之前的令牌。例如,这对于限制高亮显示很有用。
默认情况下,一旦达到限制,此过滤器会忽略包装的 TokenStream
中的任何标记,这可能导致在 incrementToken()
返回 false
之前调用 reset()
。对于大多数 TokenStream
实现,这应该是可以接受的,并且比消耗完整流更快。如果要包装一个 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>
In: "0 2 4 6 8 A C E"
要过滤的标记器: "0"、"2"、"4"、"6"、"8"、"A"、"C"、"E"
Out: "0"、"2"、"4"、"6"、"8"、"A"
限制令牌位置过滤器
此过滤器将令牌限制为配置的最大令牌位置之前的令牌。
默认情况下,一旦达到限制,此过滤器会忽略包装的 TokenStream
中的任何标记,这可能导致在 incrementToken()
返回 false
之前调用 reset()
。对于大多数 TokenStream
实现,这应该是可以接受的,并且比消耗完整流更快。如果要包装一个 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>
In "1 2 3 4 5"
要过滤的标记器 "1", "2", "3", "4", "5"
Out "1", "2", "3"
小写过滤器
将令牌中的任何大写字母转换为等效的小写令牌。所有其他字符保持不变。
工厂类: solr.LowerCaseFilterFactory
参数:无
示例
带名称
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
</analyzer>
带类名(旧版)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
In: "Down With CamelCase"
要过滤的标记器: "Down"、"With"、"CamelCase"
Out: "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 筛选器
从流中的所有输入令牌生成可重复的随机固定数量的哈希令牌。为此,它首先使用其源使用所有输入令牌。此筛选器通常在分隔符筛选器之后,如下面的示例所示。
对每个输入令牌进行哈希处理。随后通过与一组预先计算的哈希值组合,对它进行“重新哈希处理”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>
输入:“汪汪汪汪汪”
分词器到筛选器:“汪汪汪汪汪”
输出:“℁팽徭聙↝ꇁ홱杯”、“℁팽徭聙↝ꇁ홱杯”、“℁팽徭聙↝ꇁ홱杯”,…,共 512 次
N-Gram 过滤器
生成给定范围大小的 n-gram 令牌。请注意,令牌按位置和 gram 大小排序。
工厂类: solr.NGramFilterFactory
参数
minGramSize
-
必需
默认值:无
最小 gram 大小,必须 > 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
-
必需
默认值:无
要使用的编码器的名称。编码器名称必须是以下名称之一(不区分大小写)
注入
-
可选
默认值:
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
后缀(请注意,在 SPI 查找之前会去掉-id
后缀)。 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>
Remove Duplicates Token Filter
该过滤器会移除流中的重复标记。仅当标记具有相同的文本和位置值时,它们才会被视为重复标记。
由于位置必须相同,因此此过滤器可能不会根据其名称执行用户期望的操作。它是一个非常专业的过滤器,仅在非常具体的情况下才有用。即使它可能会产生误导,但为了简洁起见,它还是被这样命名了。
工厂类: 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*"
分块过滤器
此过滤器从标记流构建分块,即标记 n-gram。它将标记运行合并到单个标记中。
工厂类:solr.ShingleFilterFactory
参数
minShingleSize
-
可选
默认值:
2
每个分块的最小标记数。必须高于或等于
2
。 maxShingleSize
-
可选
默认值:
2
每个分块的最大标记数。必须高于或等于
minShingleSize
。 outputUnigrams
-
可选
默认值:
true
如果为
true
,则每个单独标记也会包含在其原始位置。 outputUnigramsIfNoShingles
-
可选
默认值:
false
如果为
true
,则如果无法分块,则将输出单独标记。 tokenSeparator
-
可选
默认值:空格字符
在连接相邻标记以形成分块时要使用的字符串。
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)
示例
分块大小为四,不包括原始标记。
<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
参数
语言
-
可选
默认值:
英语
用于选择要使用的适当 Porter 词干提取器的语言名称。大小写很重要。此字符串用于在
org.tartarus.snowball.ext
类层次结构中选择包名称。 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
参数
同义词
-
必需
默认值:无
包含同义词列表的文件的路径,每行一个。在(默认)
solr
格式中 - 有关替代方案,请参阅下面的format
参数 - 空白行和以\#
开头的行将被忽略。这可能是一个以逗号分隔的路径列表。有关更多信息,请参阅资源加载。有两种方法可以指定同义词映射
-
以逗号分隔的单词列表。如果令牌与任何单词匹配,则列表中的所有单词都将被替换,其中包括原始令牌。
-
两个以逗号分隔的单词列表,它们之间有符号“=>”。如果令牌与左侧的任何单词匹配,则右侧的列表将被替换。除非原始令牌也在右侧列表中,否则不会包括它。
-
ignoreCase
-
可选
默认值:
false
如果为
true
,则同义词将不区分大小写地匹配。 展开
-
可选
默认值:
true
如果为
true
,则同义词将展开为所有等效同义词。如果为false
,则所有等效同义词都将简化为列表中的第一个。 format
-
可选
默认值:
solr
控制如何解析同义词。支持短名称
solr
(用于SolrSynonymParser
)和wordnet
(用于WordnetSynonymParser
)。你也可以提供你自己的SynonymMap.Builder
子类的名称。 分词器工厂
-
可选
默认值:
WhitespaceTokenizerFactory
解析同义词文件时要使用的分词器工厂的名称。名称前缀为
tokenizerFactory.*
的参数将作为初始化参数提供给指定的分词器工厂。同义词过滤器工厂未使用的任何参数,包括那些没有
tokenizerFactory.*
前缀的参数,也将作为初始化参数提供给分词器工厂。如果指定了
tokenizerFactory
,则不能指定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 与同义词图过滤器结合使用,可以在查询时实现加权同义词。有关更多信息,请参阅: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]
令牌偏移有效负载过滤器
此过滤器将令牌的数字字符偏移量作为该令牌的有效负载值添加。
工厂类: 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]
修剪过滤器
此过滤器修剪令牌前后的空格。大多数分词器在空格处拆分令牌,因此此过滤器最常用于特殊情况。
工厂类: 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”
类型作为有效负载过滤器
此过滤器将令牌的类型作为编码的字节序列添加为其有效负载。
工厂类: 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>]
类型作为同义词过滤器
此过滤器将令牌的类型作为与令牌相同位置的令牌添加,可以选择添加一个可配置的前缀。
工厂类: solr.TypeAsSynonymFilterFactory
参数
前缀
-
可选
默认值:无
添加到令牌类型的前缀。
忽略
-
可选
默认值:无
要忽略并不会转换为同义词的类型的逗号分隔列表。
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>
类型令牌过滤器
此过滤器拒绝或允许指定令牌类型列表,假设令牌具有与其关联的类型元数据。例如,UAX29 URL 电子邮件令牌化器发出“<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>
单词分隔符过滤器
此过滤器在单词分隔符处拆分令牌。
单词分隔符过滤器已弃用
单词分隔符过滤器已被弃用,取而代之的是单词分隔符图过滤器,需要生成正确的令牌图,以便例如短语查询可以正确工作。 |
工厂类:solr.WordDelimiterFilterFactory
有关包括参数和示例在内的完整说明,请参阅下面的单词分隔符图过滤器。
单词分隔符图过滤器
此过滤器在单词分隔符处拆分令牌。
如果您在索引期间使用此过滤器,则必须使用展平图过滤器对其进行跟踪,以将令牌压扁在彼此之上,就像单词分隔符过滤器一样,因为索引器无法直接使用图。要在令牌拆分时获得完全正确的定位查询,您应该在查询时使用此过滤器。
注意:虽然此过滤器生成正确的令牌图,但它无法正确使用输入令牌图。
确定分隔符的规则如下确定
-
单词内部大小写变化:“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”