过滤器

过滤器检查一个标记流,并根据所使用的过滤器类型保留、转换或丢弃它们。

关于过滤器

标记器类似,过滤器消耗输入并生成一个标记流。过滤器还派生自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

名称类型。有效值为 GENERICASHKENAZISEPHARDIC。如果不处理 Ashkenazi 或 Sephardic 名称,请使用 GENERIC

ruleType

可选

默认值:APPROX

要应用的规则类型。有效值为 APPROXEXACT

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

规范化形式的名称。有效选项包括 nfcnfdnfkcnfkdnfkc_cf

模式

必需

默认值:compose

Unicode 字符合成和分解的模式。有效选项包括:composedecompose

过滤器

可选

默认值:无

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 转换的方向。有效选项包括 forwardreverse

示例

带名称

<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

必需

默认值:无

指向包含保留词列表的文本文件的路径,每行一个词。空白行和以\#开头的行会被忽略。这可以是绝对路径,也可以是 Solr conf 目录中的简单文件名。

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/

StopFilterFactoryCommonGramsFilterFactoryCommonGramsQueryFilterFactory 可以选择以 Snowball 格式读取停用词(在这些 FilterFactory 的配置中指定 format="snowball")。

工厂类: solr.SnowballPorterFilterFactory

参数

语言

可选

默认值:英语

用于选择要使用的适当 Porter 词干提取器的语言名称。大小写很重要。此字符串用于在 org.tartarus.snowball.ext 类层次结构中选择包名称。

protected

必需

默认值:受保护

包含受保护词列表的文本文件的路径,每行一个。受保护的词不会进行词干提取。空白行和以 \# 开头的行将被忽略。这可以是绝对路径,也可以是 Solr conf 目录中的简单文件名。

示例

默认行为

带名称

<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

可选

默认值:无

包含停用词列表的文件的路径,每行一个。空白行和以 \# 开头的行将被忽略。这可以是绝对路径,也可以是相对于 Solr conf 目录的路径。

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

可选

默认:StopAnalyzer#ENGLISH_STOP_WORDS_SET

要解析的停用词文件的名称。

format

可选

默认:wordset

定义如何解析单词文件。如果未指定words,则必须不指定formatformat参数的有效值为

  • 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

可选

默认值:无

包含字符 => 类型映射的文件路径,该映射可自定义此过滤器的拆分行为。识别的字符类型:LOWERUPPERALPHADIGITALPHANUMSUBWORD_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”