语言分析

本部分包含有关与字符集转换相关或用于特定语言的分词器和过滤器的信息。

对于欧洲语言,分词相当简单。标记由空格和/或一组相对较小的标点符号分隔。

在其他语言中,分词规则通常并不那么简单。某些欧洲语言也可能需要特殊的分词规则,例如德语单词的分解规则。

有关索引时语言检测的信息,请参阅语言检测

KeywordMarkerFilterFactory

保护单词不被词干分析器修改。可以在 schema 中使用“protected”属性指定自定义的受保护单词列表。Solr 中的任何词干分析器都不会修改受保护单词列表中的任何单词。

可以在configset目录中找到带有注释的示例 Solr protwords.txt

带有名称

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer name="whitespace"/>
    <filter name="keywordMarker" protected="protwords.txt" />
    <filter name="porterStem" />
  </analyzer>
</fieldtype>

带有类名(旧版)

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldtype>

KeywordRepeatFilterFactory

两次发出每个标记,一次带有KEYWORD属性,一次不带。

如果置于词干分析器之前,结果是您将获得与词干分析后的标记在同一位置保留的未词干分析的标记。匹配原始确切词条的查询将获得更好的分数,同时仍保持词干分析的召回优势。保留原始标记的另一个好处是,通配符截断将按预期工作。

要配置,请在分析链的早期添加KeywordRepeatFilterFactory。还建议包括RemoveDuplicatesTokenFilterFactory,以避免在标记未词干分析时出现重复。

示例 fieldType 配置可能如下所示

带有名称

<fieldtype name="english_stem_preserve_original" class="solr.TextField">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="keywordRepeat" />
    <filter name="porterStem" />
    <filter name="removeDuplicates" />
  </analyzer>
</fieldtype>

带有类名(旧版)

<fieldtype name="english_stem_preserve_original" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.KeywordRepeatFilterFactory" />
    <filter class="solr.PorterStemFilterFactory" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
  </analyzer>
</fieldtype>
在两次添加同一标记时,它也会得分两次(双倍),因此您可能必须重新调整排名规则。

StemmerOverrideFilterFactory

通过应用自定义映射覆盖词干算法,然后保护这些术语不被词干分析器修改。

可以在架构中的dictionary属性中指定一个单词到词干的自定义映射,该映射采用制表符分隔的文件格式。此映射中的单词将被词干化为文件中的词干,并且不会被任何词干分析器进一步更改。

带有名称

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer name="whitespace"/>
    <filter name="stemmerOverride" dictionary="stemdict.txt" />
    <filter name="porterStem" />
  </analyzer>
</fieldtype>

带有类名(旧版)

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" />
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldtype>

下面显示了一个示例stemdict.txt文件

# these must be tab-separated
monkeys	monkey
otters	otter
# some crazy ones that a stemmer would never do
dogs	cat

如果您在本地签出了 Solr 的源代码,您还可以在 Solr 的测试资源中找到此示例,路径为solr/core/src/test-files/solr/collection1/conf/stemdict.txt

词典复合词标记过滤器

此过滤器使用组件单词的词典将复合词拆分为单个单词,或分解复合词。每个输入标记都按原样传递。如果它还可以分解为子词,则每个子词也会在同一逻辑位置添加到流中。

复合词最常见于日耳曼语中。

工厂类: solr.DictionaryCompoundWordTokenFilterFactory

参数

dictionary

必需

默认值:无

包含简单单词列表的文件的路径,每行一个单词。空白行和以“#”开头的行将被忽略。

有关更多信息,请参阅 资源加载

minWordSize

可选

默认值:5

任何短于此长度的标记都不会被分解。

minSubwordSize

可选

默认值:2

短于此长度的子词不会作为标记发出。

maxSubwordSize

可选

默认值:15

长于此长度的子词不会作为标记发出。

onlyLongestMatch

可选

默认值:true

如果为true,则只有最长的匹配子词才会生成新标记。

示例

假设germanwords.txt至少包含以下单词:dumm kopf donau dampf schiff

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="dictionaryCompoundWord" dictionary="germanwords.txt"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="germanwords.txt"/>
</analyzer>

输入:“Donaudampfschiff dummkopf”

标记器到过滤器:“Donaudampfschiff”(1),“dummkopf”(2),

输出:“Donaudampfschiff”(1),“Donau”(1),“dampf”(1),“schiff”(1),“dummkopf”(2),“dumm”(2),“kopf”(2)

Unicode 校对

Unicode 校对是一种对文本进行排序的语言敏感方法,也可用于高级搜索目的。

Solr 中的 Unicode 校对速度很快,因为所有工作都在索引时完成。

<fieldtype …​ class="solr.TextField"> 中不再指定分析器,solr.CollationFieldsolr.ICUCollationField 字段类型类提供了此功能。solr.ICUCollationFieldICU4J 库 支持,它提供了更灵活的配置、更多的语言环境、更快的速度,并且需要更少的内存和更少的索引空间,因为其键比由支持 solr.CollationField 的 JDK 实现生成的键小。

要使用 solr.ICUCollationField,您必须启用 analysis-extras 模块

solr.ICUCollationFieldsolr.CollationField 字段可以通过两种方式创建

  • 基于与语言环境关联的系统整理程序。

  • 基于定制的 RuleBasedCollator 规则集。

ICUCollationField 属性

使用系统整理程序

语言环境

必需

默认值:无

RFC 3066 语言环境 ID。

强度

可选

默认值:无

有效值为 primarysecondarytertiaryquaternaryidentical。有关详细信息,请参阅 ICU 校对概念中的比较级别

分解

可选

默认值:无

有效值为 nocanonical。有关详细信息,请参阅 ICU 校对概念中的规范化

使用定制的规则集

自定义

必需

默认值:无

包含 ICU RuleBasedCollator 支持的规则的 UTF-8 文本文件的路径

强度

可选

默认值:无

有效值为 primarysecondarytertiaryquaternaryidentical。有关详细信息,请参阅 ICU 校对概念中的比较级别

分解

可选

默认值:无

有效值为 nocanonical。有关详细信息,请参阅 ICU 校对概念中的规范化

专家选项

备用

可选

默认值:无

有效值为 shiftednon-ignorable。可用于忽略标点符号或空格。

大小写级别

可选

默认值:false

如果为 true,则与 strength="primary" 结合使用,重音符号将被忽略,但会考虑大小写。有关详细信息,请参阅 ICU 校对概念中的大小写级别

大小写优先

可选

默认值:无

有效值为 lowerupper。当不忽略大小写时,可用于控制哪种大小写优先排序。

数字

可选

默认值:false

如果为 true,则按数字值对数字进行排序,例如,foobar-9 排在 foobar-10 之前。

变量顶部

可选

默认值:无

单个字符或缩写。控制 alternate 的变量。

针对特定语言对文本进行排序

在此示例中,文本根据 ICU4J 提供的默认德语规则进行排序。

语言环境通常被定义为语言和国家/地区的组合,但如果你愿意,你只需指定语言即可。例如,如果你将“de”指定为语言,你将获得适用于德语的排序。如果你将“de”指定为语言,并将“CH”指定为国家/地区,你将获得专门针对瑞士定制的德语排序。

<!-- Define a field type for German collation -->
<fieldType name="collatedGERMAN" class="solr.ICUCollationField"
           locale="de"
           strength="primary" />
...
<!-- Define a field to store the German collated manufacturer names. -->
<field name="manuGERMAN" type="collatedGERMAN" indexed="false" stored="false" docValues="true"/>
...
<!-- Copy the text to this field. We could create French, English, Spanish versions too,
     and sort differently for different users! -->
<copyField source="manu" dest="manuGERMAN"/>

在上面的示例中,我们将强度定义为“primary”。对照强度决定了排序顺序的严格程度,但它也取决于语言。例如,在英语中,“primary”强度忽略大小写和重音。

另一个示例

<fieldType name="polishCaseInsensitive" class="solr.ICUCollationField"
           locale="pl_PL"
           strength="secondary" />
...
<field name="city" type="text_general" indexed="true" stored="true"/>
...
<field name="city_sort" type="polishCaseInsensitive" indexed="true" stored="false"/>
...
<copyField source="city" dest="city_sort"/>

类型将用于数据包含波兰语文本的字段。“secondary”强度将忽略大小写差异,但与“primary”强度不同,带附加符号的字母将与没有附加符号的相同基础字母不同地进行排序。

使用“city_sort”字段进行排序的示例

q=*:*&fl=city&sort=city_sort+asc

针对多种语言对文本进行排序

有两种方法支持多种语言:如果你希望支持的语言列表较少,请考虑为每种语言定义整理后的字段并使用 copyField。但是,添加大量排序字段会增加磁盘和索引成本。另一种方法是使用 Unicode default 对照器。

Unicode defaultROOT 语言环境具有适用于大多数语言的规则。要使用 default 语言环境,只需将语言环境定义为空字符串即可。此 Unicode 默认排序仍然比标准 Solr 排序高级得多。

<fieldType name="collatedROOT" class="solr.ICUCollationField"
           locale=""
           strength="primary" />

使用自定义规则对文本进行排序

你可以定义你自己的排序规则集。最简单的方法是采用接近你想要的内容的现有规则并对其进行自定义。

在下面的示例中,我们为德语创建了一个名为 DIN 5007-2 的自定义规则集。此规则集以不同的方式处理德语中的变音符号:它将 ö 视为与 oe 等效,将 ä 视为与 ae 等效,将 ü 视为与 ue 等效。有关更多信息,请参阅 ICU RuleBasedCollator javadocs

此示例展示了如何为 solr.ICUCollationField 创建自定义规则集并将其转储到文件中

// get the default rules for Germany
// these are called DIN 5007-1 sorting
RuleBasedCollator baseCollator = (RuleBasedCollator) Collator.getInstance(new ULocale("de", "DE"));

// define some tailorings, to make it DIN 5007-2 sorting.
// For example, this makes ö equivalent to oe
String DIN5007_2_tailorings =
    "& ae , a\u0308 & AE , A\u0308"+
    "& oe , o\u0308 & OE , O\u0308"+
    "& ue , u\u0308 & UE , u\u0308";

// concatenate the default rules to the tailorings, and dump it to a String
RuleBasedCollator tailoredCollator = new RuleBasedCollator(baseCollator.getRules() + DIN5007_2_tailorings);
String tailoredRules = tailoredCollator.getRules();

// write these to a file, be sure to use UTF-8 encoding!!!
FileOutputStream os = new FileOutputStream(new File("/solr_home/conf/customRules.dat"));
IOUtils.write(tailoredRules, os, "UTF-8");

此规则集现在可用于 Solr 中的自定义排序

<fieldType name="collatedCUSTOM" class="solr.ICUCollationField"
           custom="customRules.dat"
           strength="primary" />

JDK 排序

如上所述,ICU Unicode 排序在几个方面优于 JDK 排序,但如果您由于某种原因无法使用 ICU4J,则可以使用 solr.CollationField

JDK 排序的原理与 ICU 排序相同;您只需指定 languagecountryvariant 参数,而不是组合的 locale 参数。

JDK 排序属性

使用系统排序器(请参阅 Oracle 支持的语言环境列表

语言

必需

默认值:无

ISO-639 语言代码。

国家/地区

可选

默认值:无

ISO-3166 国家/地区代码。

变体

可选

默认值:无

供应商或特定于浏览器的代码。

强度

可选

默认值:无

有效值是 primarysecondarytertiaryidentical。有关更多信息,请参阅 Java Collator javadoc

分解

可选

默认值:无

有效值是 nocanonicalfull。有关更多信息,请参阅 Java Collator javadoc

使用定制的规则集:

自定义

必需

默认值:无

包含 JDK RuleBasedCollator 支持的规则的 UTF-8 文本文件的路径。

强度

可选

默认值:无

有效值是 primarysecondarytertiaryidentical。有关更多信息,请参阅 Java Collator javadoc

分解

可选

默认值:无

有效值是 nocanonicalfull。有关更多信息,请参阅 Java Collator javadoc

solr.CollationField 示例
<fieldType name="collatedGERMAN" class="solr.CollationField"
           language="de"
           country="DE"
           strength="primary" /> <!-- ignore Umlauts and letter case when sorting -->
...
<field name="manuGERMAN" type="collatedGERMAN" indexed="false" stored="false" docValues="true" />
...
<copyField source="manu" dest="manuGERMAN"/>

ASCII 和十进制折叠过滤器

ASCII 折叠

此过滤器将不在前 127 个 ASCII 字符(“基本拉丁语”Unicode 块)中的字母、数字和符号 Unicode 字符转换为其 ASCII 等效项(如果存在)。只有那些有合理 ASCII 替代项的字符才会被转换。

这可以通过导致更多匹配来增加召回率。另一方面,它可能会降低准确度,因为可能会丢失特定于语言的字符差异。

工厂类: solr.ASCIIFoldingFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="asciiFolding"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>

输入: “Björn Ångström”

分词器到过滤器: “Björn”、“Ångström”

输出: “Bjorn”、“Angstrom”

十进制数字折叠

此过滤器将 Unicode “十进制数字”常规类别 (Nd) 中的任何字符转换为其等效的基本拉丁语数字 (0-9)。

这可以通过导致更多匹配来增加召回率。另一方面,它可能会降低准确度,因为可能会丢失特定于语言的字符差异。

工厂类: solr.DecimalDigitFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="decimalDigit"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.DecimalDigitFilterFactory"/>
</analyzer>

OpenNLP 集成

Lucene 模块 lucene/analysis/opennlp 通过多个分析组件提供 OpenNLP 集成:一个标记器、一个词性标注过滤器、一个短语块过滤器和一个词形还原过滤器。除了这些分析组件之外,Solr 还提供一个更新请求处理器来提取命名实体。另请参阅 可作为插件加载的更新处理器工厂

由于两个原因,OpenNLP 标记器 必须与所有其他 OpenNLP 分析组件一起使用。首先,OpenNLP 标记器检测并标记所有 OpenNLP 过滤器所需的句子边界。其次,由于这些过滤器使用的预训练 OpenNLP 模型是使用相应的语言特定句子检测/标记化模型训练的,因此在运行时必须使用相同模型进行相同的标记化才能获得最佳性能。

要使用 OpenNLP 组件,您必须启用 analysis-extras 模块

OpenNLP 标记器

OpenNLP 标记器将两个语言特定二进制模型文件作为参数:一个句子检测器模型和一个标记器模型。每个句子中的最后一个标记被标记,以便后续基于 OpenNLP 的过滤器可以使用此信息一次对一个句子的标记应用操作。请参阅 OpenNLP 网站,了解有关下载预训练模型的信息。

工厂类: solr.OpenNLPTokenizerFactory

参数

sentenceModel

必需

默认值:无

语言特定 OpenNLP 句子检测模型文件的路径。有关更多信息,请参阅 资源加载

tokenizerModel

必需

默认值:无

语言特定 OpenNLP 标记化模型文件的路径。有关更多信息,请参阅 资源加载

示例

带有名称

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
</analyzer>

OpenNLP 词性过滤器

此过滤器将每个标记的类型属性设置为配置模型分配的词性 (POS)。请参阅 OpenNLP 网站,了解有关下载预训练模型的信息。

Lucene 目前不索引标记类型,因此,如果您想保留此信息,则必须将其保存在有效负载中或作为同义词;请参阅以下示例。

工厂类:solr.OpenNLPPOSFilterFactory

参数

posTaggerModel

必需

默认值:无

特定于语言的 OpenNLP POS 标记器模型文件的路径。有关更多信息,请参阅资源加载

示例

OpenNLP 分词器将对标点符号进行分词,这对于后续的标记过滤器很有用。通常,您不希望在索引中包含标点符号,因此,以下示例中包含TypeTokenFilter,其中 stop.pos.txt 包含以下内容

stop.pos.txt
#
$
''
``
,
-LRB-
-RRB-
:
.

将每个标记的 POS 作为有效负载进行索引

带有名称

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="typeAsPayload"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.TypeAsPayloadFilterFactory"/>
  <filter class="solr.TypeTokenFilterFactory" types="stop.pos.txt"/>
</analyzer>

在每个标记的 POS 前加上“@”后,将每个标记的 POS 作为同义词进行索引(请参阅TypeAsSynonymFilter 说明

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="typeAsSynonym" prefix="@"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

仅索引名词 - keep.pos.txt 文件包含行 NNNNSNNPNNPS

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="type" types="keep.pos.txt" useWhitelist="true"/>
</analyzer>

OpenNLP 短语块划分过滤器

此过滤器基于 OpenNLP 短语块划分模型的输出设置每个标记的类型属性。块标签替换之前每个标记的类型属性中的 POS 标记。有关下载预训练模型的信息,请参阅OpenNLP 网站

先决条件:OpenNLP 分词器OpenNLP 词性过滤器必须在此过滤器之前。

Lucene 目前不索引标记类型,因此,如果您想保留此信息,则必须将其保存在有效负载中或作为同义词;请参阅以下示例。

工厂类:solr.OpenNLPChunkerFilterFactory

参数

chunkerModel

必需

默认值:无

特定于语言的 OpenNLP 短语块划分模型文件的路径。有关更多信息,请参阅资源加载

示例:

将每个标记的短语块标签作为有效负载进行索引

带有名称

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPChunker" chunkerModel="en-chunker.bin"/>
  <filter name="typeAsPayload"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.OpenNLPChunkerFilterFactory" chunkerModel="en-chunker.bin"/>
  <filter class="solr.TypeAsPayloadFilterFactory"/>
</analyzer>

在每个标记的短语块标签前加上“#”后,将每个标记的短语块标签作为同义词进行索引(请参阅TypeAsSynonymFilter 说明

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPChunker" chunkerModel="en-chunker.bin"/>
  <filter name="typeAsSynonym" prefix="#"/>
</analyzer>

OpenNLP 词形还原过滤器

此过滤器使用词形还原替换每个标记的文本。支持基于词典的词形还原和基于模型的词形还原。如果同时配置了这两种方法,则首先尝试基于词典的词形还原,然后针对词汇量外的标记咨询基于模型的词形还原。有关下载预训练模型的信息,请参阅OpenNLP 网站

工厂类:solr.OpenNLPLemmatizerFilter

参数

必须提供 dictionarylemmatizerModel,也可以同时提供两者 - 请参见以下示例

dictionary

可选

默认值:无

词形还原词典文件的路径。有关更多信息,请参见 资源加载。词典文件必须编码为 UTF-8,每行一个条目,格式为 word[tab]lemma[tab]part-of-speech,例如 wrote[tab]write[tab]VBD

lemmatizerModel

可选

默认值:无

特定语言的 OpenNLP 词形还原模型文件的路径。有关更多信息,请参见 资源加载

示例

执行基于词典的词形还原,并对词典外的标记进行基于模型的词形还原(有关使用 TypeTokenFilter 避免对标点符号编制索引的信息,请参见上面的 OpenNLP 词性过滤器 部分)

带有名称

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="oenNLPLemmatizer"
          dictionary="lemmas.txt"
          lemmatizerModel="en-lemmatizer.bin"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.OpenNLPLemmatizerFilterFactory"
          dictionary="lemmas.txt"
          lemmatizerModel="en-lemmatizer.bin"/>
  <filter class="solr.TypeTokenFilterFactory" types="stop.pos.txt"/>
</analyzer>

仅执行基于词典的词形还原

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPLemmatizer" dictionary="lemmas.txt"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

仅执行基于模型的词形还原,保留原始标记并以同义词的形式发出词形(请参见 KeywordRepeatFilterFactory 说明

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="keywordRepeat"/>
  <filter name="openNLPLemmatizer" lemmatizerModel="en-lemmatizer.bin"/>
  <filter name="removeDuplicates"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

特定语言的工厂

这些工厂均设计为与特定语言配合使用。此处涵盖的语言有

阿拉伯语

孟加拉语

巴西葡萄牙语

保加利亚语

加泰罗尼亚语

繁体中文

简体中文

捷克语

丹麦语

荷兰语

爱沙尼亚语

芬兰语

法语

加利西亚语

德语

希腊语

希伯来语、老挝语、缅甸语、高棉语

印地语

印度尼西亚语

意大利语

爱尔兰语

日语

韩语

拉脱维亚语

挪威语

波斯语

波兰语

葡萄牙语

罗马尼亚语

俄语

斯堪的纳维亚语

塞尔维亚语

西班牙语

瑞典语

泰语

土耳其语

乌克兰语

阿拉伯语

Solr 提供对 Light-10(PDF)词干提取算法的支持,而 Lucene 包含一个示例停用词列表。

此算法定义了字符规范化和词干提取,因此将它们拆分为两个过滤器以提供更大的灵活性。

工厂类:solr.ArabicStemFilterFactorysolr.ArabicNormalizationFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="arabicNormalization"/>
  <filter name="arabicStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ArabicNormalizationFilterFactory"/>
  <filter class="solr.ArabicStemFilterFactory"/>
</analyzer>

孟加拉语

有两个专门用于处理孟加拉语的过滤器。它们使用 Lucene 类 org.apache.lucene.analysis.bn.BengaliNormalizationFilterorg.apache.lucene.analysis.bn.BengaliStemFilter

工厂类: solr.BengaliStemFilterFactorysolr.BengaliNormalizationFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="bengaliNormalization"/>
  <filter name="bengaliStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.BengaliNormalizationFilterFactory"/>
  <filter class="solr.BengaliStemFilterFactory"/>
</analyzer>

标准化 - মানুষমানুস

词干提取 - সমস্তসমস্

巴西葡萄牙语

这是一个专门为提取葡萄牙语巴西方言的词干而编写的 Java 过滤器。它使用 Lucene 类 org.apache.lucene.analysis.br.BrazilianStemmer。虽然该词干提取器可以配置为使用受保护词列表(不应提取词干),但此工厂不接受任何指定该列表的参数。

工厂类: solr.BrazilianStemFilterFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="brazilianStem"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.BrazilianStemFilterFactory"/>
</analyzer>

输入:“praia praias”

分词器到过滤器:“praia”、“praias”

输出:“pra”、“pra”

保加利亚语

Solr 包含一个针对保加利亚语的轻量级词干提取器,遵循 此算法(PDF),而 Lucene 包含一个示例停用词列表。

工厂类: solr.BulgarianStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="bulgarianStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.BulgarianStemFilterFactory"/>
</analyzer>

加泰罗尼亚语

Solr 可以使用 Snowball Porter 词干提取器提取加泰罗尼亚语的词干,参数为 language="Catalan"。Solr 包含一组加泰罗尼亚语缩略语,可以使用 solr.ElisionFilterFactory 去除这些缩略语。

工厂类: solr.SnowballPorterFilterFactory

参数

语言:

+

必需

默认值:无

+ 词干提取器语言,在本例中为 Catalan

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_ca.txt"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Catalan" />
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_ca.txt"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Catalan" />
</analyzer>

输入:“llengües llengua”

分词器到过滤器:“llengües”(1) “llengua”(2),

输出:“llengu”(1)、“llengu”(2)

繁体中文

ICU 分词器 的默认配置适用于繁体中文文本。它遵循 Unicode 文本分段算法的单词拆分规则,用于非中文文本,并使用词典对中文单词进行分段。

要使用此分词器,您必须启用 analysis-extras 模块

标准分词器 也可用于对繁体中文文本进行分词。遵循 Unicode 文本分段算法的单词拆分规则,它为每个中文字符生成一个标记。与 CJK 二元组过滤器 结合使用时,将形成中文字符的重叠二元组。

CJK 宽度过滤器 将全宽 ASCII 变体折叠成等效的基本拉丁形式。

示例

带有名称

<analyzer>
  <tokenizer name="icu"/>
  <filter name="cjkWidth"/>
  <filter name="lowercase"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.ICUTokenizerFactory"/>
  <filter class="solr.CJKWidthFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="cjkBigram"/>
  <filter name="cjkWidth"/>
  <filter name="lowercase"/>
</analyzer>

CJK 二元组过滤器

生成从标准分词器ICU 分词器生成的 CJK 字符的双字(重叠的 2 个字符序列)。

默认情况下,所有 CJK 字符都生成双字,但可以通过指定正字法类型参数 hanhiraganakatakanahangul 来获得更精细的控制。当设置为 false 时,相应类型的字符将作为单字传递,并且不会包含在任何双字中。

当 CJK 字符没有相邻字符来形成双字时,它将以单字形式输出。如果您希望始终输出单字和双字,请将 outputUnigrams 参数设置为 true

在所有情况下,所有非 CJK 输入都将原样传递。

参数

han

可选

默认值:true

如果为 false,汉字(中文)字符不会形成双字。

hiragana

可选

默认值:true

如果为 false,平假名(日语)字符不会形成双字。

katakana

可选

默认值:true

如果为 false,片假名(日语)字符不会形成双字。

hangul

可选

默认值:true

如果为 false,韩文(韩语)字符不会形成双字。

outputUnigrams

可选

默认值:false

如果为 true,除了形成双字之外,所有字符还将作为单字传递。

请参阅繁体中文下的示例。

简体中文

对于简体中文,Solr 通过HMM 中文分词器提供对中文句子和单词分词的支持。此组件包含一个大型词典,并使用隐马尔可夫模型将中文文本分词为单词。要使用此分词器,您必须启用analysis-extras 模块

ICU 分词器的默认配置也适用于简体中文文本。它遵循 Unicode 文本分词算法的单词断词规则(针对非中文文本),并使用词典对中文单词进行分词。要使用此分词器,您必须启用analysis-extras 模块

也适用于中文分析

CJK 宽度过滤器将全角 ASCII 变体折叠成等效的基本拉丁形式,并将半角片假名变体折叠成等效的全角形式。

示例

带有名称

<analyzer>
  <tokenizer name="hmmChinese"/>
  <filter name="cjkWidth"/>
  <filter name="stop"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter name="porterStem"/>
  <filter name="lowercase"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.HMMChineseTokenizerFactory"/>
  <filter class="solr.CJKWidthFilterFactory"/>
  <filter class="solr.StopFilterFactory"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter class="solr.PorterStemFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="icu"/>
  <filter name="cjkWidth"/>
  <filter name="stop"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter name="lowercase"/>
</analyzer>

HMM 中文分词器

对于简体中文,Solr 在 `analysis-extras` 模块中通过 `solr.HMMChineseTokenizerFactory` 提供对中文句子和单词分词的支持。此组件包含一个大型词典,并使用隐马尔可夫模型将中文文本分词为单词。要使用此分词器,您必须启用 analysis-extras 模块

工厂类: solr.HMMChineseTokenizerFactory

参数:

示例

要使用默认设置,并回退到英文单词的英文 Porter 词干分析器,请使用

<analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>

或者,要配置您自己的分析设置,请将 `solr.HMMChineseTokenizerFactory` 与您的自定义过滤器设置一起使用。在 简体中文 部分中查看此示例。

捷克语

Solr 包含一个捷克语轻量词干分析器,遵循 此算法,而 Lucene 包含一个示例停用词列表。

工厂类: solr.CzechStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="czechStem"/>
<analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.CzechStemFilterFactory"/>
<analyzer>

输入:“prezidenští, prezidenta, prezidentského”

分词器到过滤器:“prezidenští”、“prezidenta”、“prezidentského”

输出:“preziden”、“preziden”、“preziden”

丹麦语

Solr 可以使用 Snowball Porter 词干分析器对丹麦语进行词干分析,参数为 `language="Danish"`。

工厂类: solr.SnowballPorterFilterFactory

参数

语言

必需

默认值:无

词干分析器语言,在本例中为 `Danish`。

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Danish" />
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Danish" />
</analyzer>

输入:“undersøg undersøgelse”

分词器到过滤器:“undersøg”(1) “undersøgelse”(2),

输出:“undersøg”(1), “undersøg”(2)

荷兰语

Solr 可以使用 Snowball Porter 词干分析器对荷兰语进行词干分析,参数为 `language="Dutch"`。

工厂类: solr.SnowballPorterFilterFactory

参数

语言

必需

默认值:无

词干分析器语言,在本例中为 `Dutch`。

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Dutch"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
</analyzer>

输入:“kanaal kanalen”

分词器到过滤器:“kanaal”、“kanalen”

输出:“kanal”、“kanal”

爱沙尼亚语

Solr 可以使用 Snowball Porter 词干分析器对爱沙尼亚语进行词干分析,参数为 `language="Estonian"`。

工厂类: solr.SnowballPorterFilterFactory

参数

语言

必需

默认值:无

词干分析器语言,在本例中为 `Estonian`。

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Estonian"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Estonian"/>
</analyzer>

输入:“Taevani tõustes”

分词器到过滤器:“Taevani”、“tõustes”

输出:“taevani”、“tõus”

芬兰语

Solr 包含对芬兰语词干分析的支持,而 Lucene 包含一个示例停用词列表。

工厂类: solr.FinnishLightStemFilterFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="finnishLightStem"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.FinnishLightStemFilterFactory"/>
</analyzer>

输入:“kala kalat”

分词器到过滤器:“kala”、“kalat”

输出:“kala”、“kala”

法语

省略过滤器

从标记流中移除冠词省略。此过滤器可用于法语、加泰罗尼亚语、意大利语和爱尔兰语等语言。

工厂类: solr.ElisionFilterFactory

参数

冠词

可选

默认值:无

包含要剥离的文章列表(每行一篇)的文件路径名。文章是诸如“le”之类的单词,通常缩写,例如l’avion(飞机)。此文件应包含缩写形式,它位于撇号之前。在本例中,只需“l”。如果未指定articles属性,则使用一组默认的法语文章。

ignoreCase

可选

默认值:false

如果为true,则该过滤器在将单词与常用单词文件进行比较时会忽略单词的大小写。

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="elision"
          ignoreCase="true"
          articles="lang/contractions_fr.txt"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ElisionFilterFactory"
          ignoreCase="true"
          articles="lang/contractions_fr.txt"/>
</analyzer>

输入:“L’histoire d’art”

要过滤的分词器:“L’histoire”、“d’art”

输出:“histoire”、“art”

法语轻型词干过滤器

Solr 为法语包含三个词干提取器:一个在 solr.SnowballPorterFilterFactory 中,一个名为 solr.FrenchLightStemFilterFactory 的轻型词干提取器,以及一个名为 solr.FrenchMinimalStemFilterFactory 的更不激进的词干提取器。Lucene 包含一个示例停用词列表。

工厂类: solr.FrenchLightStemFilterFactorysolr.FrenchMinimalStemFilterFactory

参数:

示例

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_fr.txt"/>
  <filter name="frenchLightStem"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_fr.txt"/>
  <filter name="frenchMinimalStem"/>
</analyzer>

输入:“le chat, les chats”

要过滤的分词器:“le”、“chat”、“les”、“chats”

输出:“le”、“chat”、“le”、“chat”

加利西亚语

Solr 包含一个用于加利西亚语的词干提取器,遵循此算法,而 Lucene 包含一个示例停用词列表。

工厂类: solr.GalicianStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="galicianStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.GalicianStemFilterFactory"/>
</analyzer>

输入:“felizmente Luzes”

要过滤的分词器:“felizmente”、“luzes”

输出:“feliz”、“luz”

德语

Solr 为德语包含四个词干提取器:一个在 solr.SnowballPorterFilterFactory language="German" 中,一个名为 solr.GermanStemFilterFactory 的词干提取器,一个名为 solr.GermanLightStemFilterFactory 的轻型词干提取器,以及一个名为 solr.GermanMinimalStemFilterFactory 的更不激进的词干提取器。Lucene 包含一个示例停用词列表。

工厂类: solr.GermanStemFilterFactorysolr.LightGermanStemFilterFactorysolr.MinimalGermanStemFilterFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanStem"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.GermanStemFilterFactory"/>
</analyzer>
<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanLightStem"/>
</analyzer>
<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanMinimalStem"/>
</analyzer>

输入:“haus häuser”

要过滤的分词器:“haus”、“häuser”

输出:“haus”、“haus”

希腊语

此过滤器将希腊字符集中的大写字母转换为等效的小写字母。

工厂类: solr.GreekLowerCaseFilterFactory

参数:

自 Solr 3.1 起,不再支持使用自定义字符集。如果您需要以这些编码对文本进行索引,请在 I/O 期间使用 Java 的字符集转换工具(InputStreamReader 等),以便 Lucene 可以将此文本分析为 Unicode。

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="greekLowercase"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.GreekLowerCaseFilterFactory"/>
</analyzer>

印地语

Solr 包含对印地语词干分析的支持,遵循 此算法(PDF),通过 solr.HindiNormalizationFilterFactory 支持常见的拼写差异,通过 solr.IndicNormalizationFilterFactory 支持编码差异,遵循 此算法,Lucene 包含一个示例停用词列表。

工厂类: solr.IndicNormalizationFilterFactorysolr.HindiNormalizationFilterFactorysolr.HindiStemFilterFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="indicNormalization"/>
  <filter name="hindiNormalization"/>
  <filter name="hindiStem"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.IndicNormalizationFilterFactory"/>
  <filter class="solr.HindiNormalizationFilterFactory"/>
  <filter class="solr.HindiStemFilterFactory"/>
</analyzer>

印度尼西亚语

Solr 包含对印度尼西亚语(Bahasa Indonesia)词干分析的支持,遵循 此算法(PDF),Lucene 包含一个示例停用词列表。

工厂类: solr.IndonesianStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="indonesianStem" stemDerivational="true" />
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true" />
</analyzer>

输入:“sebagai sebagainya”

分词器到过滤器:“sebagai”、“sebagainya”

输出:“bagai”、“bagai”

意大利语

Solr 包含两个意大利语词干分析器:一个在 solr.SnowballPorterFilterFactory language="Italian" 中,另一个是名为 solr.ItalianLightStemFilterFactory 的轻量词干分析器。Lucene 包含一个示例停用词列表。

工厂类: solr.ItalianStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_it.txt"/>
  <filter name="italianLightStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_it.txt"/>
  <filter class="solr.ItalianLightStemFilterFactory"/>
</analyzer>

输入:“propaga propagare propagamento”

分词器到过滤器:“propaga”、“propagare”、“propagamento”

输出:“propag”、“propag”、“propag”

爱尔兰语

Solr 可以使用 Snowball Porter 词干分析器对爱尔兰语进行词干分析,参数为 language="Irish"。Solr 包含 solr.IrishLowerCaseFilterFactory,它可以处理爱尔兰语特定结构。Solr 还包含一组爱尔兰语缩略词,可以使用 solr.ElisionFilterFactory 将其剥离。

工厂类: solr.SnowballPorterFilterFactory

参数

语言

必需

默认值:无

词干分析器语言,本例中为 Irish

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="elision"
          articles="lang/contractions_ga.txt"/>
  <filter name="irishLowercase"/>
  <filter name="snowballPorter" language="Irish" />
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_ga.txt"/>
  <filter class="solr.IrishLowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Irish" />
</analyzer>

输入:“siopadóireacht síceapatacha b’fhearr m’athair”

分词器到过滤器:“siopadóireacht”、“síceapatacha”、“b’fhearr”、“m’athair”

输出:“siopadóir”、“síceapaite”、“fearr”、“athair”

日语

Solr 包含对日语分析的支持,通过 Lucene Kuromoji 形态分析器,它包含几个分析组件 - 每个组件的更多详细信息如下

同样适用于日语分析,来自 lucene-analyzers-common

  • CJKWidthFilter 会将全角 ASCII 变体折叠到等效的基本拉丁形式中,并将半角片假名变体折叠到等效的全角形式中。

日语迭字符 CharFilter

将日语水平迭字符(odoriji)规范为其展开形式。不支持垂直迭字符。

工厂类: JapaneseIterationMarkCharFilterFactory

参数

normalizeKanji

可选

默认值:true

设为 false 以不规范化汉字迭字符。

normalizeKana

可选

默认值:true

设为 false 以不规范化假名迭字符。

日语分词器

用于日语的分词器,使用形态分析,并用词性、基本形式(又称词干)、读法和发音对每个术语进行注释。

JapaneseTokenizer 具有 search 模式(默认),该模式执行对搜索有用的分词:使用启发式方法将复合术语分词为其组成部分,同时也将原始复合术语保留为同义词。

工厂类: solr.JapaneseTokenizerFactory

参数

mode

可选

默认值:无

使用 search 模式以获得对搜索有用的名词分解效果。search 模式会以牺牲词性准确性为代价来改善搜索分词。mode 的有效值为

  • normal:默认分词

  • search:对搜索有用的分词(额外的复合拆分)

  • extended:搜索模式加上对未知单词的单字化(实验性)

    对于某些应用程序,最好对索引使用 search 模式,对查询使用 normal 模式,以提高精确度并防止复合词的各个部分被匹配和高亮显示。

userDictionary

可选

默认值:无

用户词典的文件名,允许使用自己的条目覆盖统计模型,用于分词、词性标记和读数,而无需指定权重。请参阅 lang/userdict_ja.txt 以获取用户词典文件示例。

userDictionaryEncoding

可选

默认:UTF-8

用户词典编码。

discardPunctuation

可选

默认值:true

设为 false 以保留标点符号,设为 true 以丢弃标点符号。

discardCompoundToken

可选

默认值:无

设为 false 以保留具有 search 模式的原始复合标记,设为 true 以丢弃。

日语基本形式过滤器

用对应的基本形式(词根)替换原始术语的文本。(JapaneseTokenizer 使用其基本形式注释每个术语。)

工厂类: JapaneseBaseFormFilterFactory

参数:

日语词性停止过滤器

移除具有已配置词性之一的术语。JapaneseTokenizer 使用词性注释术语。

工厂类 JapanesePartOfSpeechStopFilterFactory

参数

标签

可选

默认值:无

要移除术语的词性列表的文件名。请参阅 sample_techproducts_config configset 中的 conf/lang/stoptags_ja.txt 以获取示例。

日语片假名词干过滤器

通过移除长音字符(U+30FC)来标准化以长音字符结尾的常见片假名拼写变体。

solr.CJKWidthFilterFactory 应在该过滤器之前指定,以将半角片假名标准化为全角。

工厂类: JapaneseKatakanaStemFilterFactory

参数

minimumLength

可选

默认值:4

低于此长度的术语不会进行词干提取。值必须为 2 或更大。

CJK 宽度过滤器

将全角 ASCII 变体折叠到等效的基本拉丁形式中,并将半角片假名变体折叠到等效的全角形式中。

工厂类: CJKWidthFilterFactory

参数:

示例

带有名称

<fieldType name="text_ja" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <!-- Uncomment if you need to handle iteration marks: -->
    <!-- <charFilter name="japaneseIterationMark" /> -->
    <tokenizer name="japanese" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter name="japaneseBaseForm"/>
    <filter name="japanesePartOfSpeechStop" tags="lang/stoptags_ja.txt"/>
    <filter name="cjkWidth"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_ja.txt"/>
    <filter name="japaneseKatakanaStem" minimumLength="4"/>
    <filter name="lowercase"/>
  </analyzer>
</fieldType>

带有类名(旧版)

<fieldType name="text_ja" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <!-- Uncomment if you need to handle iteration marks: -->
    <!-- <charFilter class="solr.JapaneseIterationMarkCharFilterFactory" /> -->
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter class="solr.JapaneseBaseFormFilterFactory"/>
    <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/>
    <filter class="solr.CJKWidthFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

韩语

韩语(nori)分析器将 Lucene 的 nori 分析模块集成到 Solr 中。它使用 mecab-ko-dic 词典对韩语文本执行形态分析。

该词典是使用 MeCab 构建的,并定义了适用于韩语的特征格式。

Nori 还具有用户词典功能,该功能允许使用你自己的分词、词性标签和读音条目覆盖统计模型,而无需指定权重。

示例:

带有名称

<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="korean" decompoundMode="discard" outputUnknownUnigrams="false"/>
    <filter name="koreanPartOfSpeechStop" />
    <filter name="koreanReadingForm" />
    <filter name="lowercase" />
  </analyzer>
</fieldType>

带有类名(旧版)

<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
    <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
    <filter class="solr.KoreanReadingFormFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

韩语分词器

工厂类solr.KoreanTokenizerFactory

SPI 名称korean

参数:

userDictionary

可选

默认值:无

指向用户提供的词典的路径,以将自定义名词或复合词添加到默认词典中。

userDictionaryEncoding

可选

默认值:无

用户词典的字符编码。

decompoundMode

可选

默认值:discard

定义如何处理复合标记。选项有

  • none:标记不分解。

  • discard:标记分解,原始形式被丢弃。

  • mixed:标记分解,原始形式被保留。

outputUnknownUnigrams

可选

默认值:false

如果为 true,将输出未知单词的单字。

discardPunctuation

可选

默认值:true

如果为 true,将丢弃标点符号。

韩语词性停止过滤器

此过滤器删除与词性标记匹配的标记。

工厂类solr.KoreanPartOfSpeechStopFilterFactory

SPI 名称koreanPartOfSpeechStop

参数:无。

韩语读音形式过滤器

此过滤器用读音属性(韩字的韩文转写)替换术语文本。

工厂类solr.KoreanReadingFormFilterFactory

SPI 名称koreanReadingForm

参数:无。

希伯来语、老挝语、缅甸语、高棉语

除 UAX#29 分词规则外,Lucene 还支持希伯来语使用双引号和单引号字符,以及使用 analysis-extras 模块中的 solr.ICUTokenizerFactory 将老挝语、缅甸语和高棉语划分为音节。要使用此分词器,您必须启用 analysis-extras 模块

有关更多信息,请参见 ICUTokenizer

拉脱维亚语

Solr 包括对拉脱维亚语词干提取的支持,而 Lucene 包括一个示例停用词列表。

工厂类: solr.LatvianStemFilterFactory

参数:

示例

带有名称

<fieldType name="text_lvstem" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="latvianStem"/>
  </analyzer>
</fieldType>

带有类名(旧版)

<fieldType name="text_lvstem" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.LatvianStemFilterFactory"/>
  </analyzer>
</fieldType>

输入: "tirgiem tirgus"

分词器到过滤器: "tirgiem"、"tirgus"

输出: "tirg"、"tirg"

挪威语

Solr 包括两个用于对挪威语进行词干提取的类,NorwegianLightStemFilterFactoryNorwegianMinimalStemFilterFactory。Lucene 包括一个示例停用词列表。

另一种选择是使用 Snowball Porter 词干提取器,并使用 language="Norwegian" 参数。

对于规范化,有一个 NorwegianNormalizationFilterFactory,它是 斯堪的纳维亚语规范化过滤器 的一个变体,但折叠规则针对挪威语进行了调整。

挪威语轻量级词干提取器

NorwegianLightStemFilterFactory 需要对 -dom 和 -het 结尾进行“两遍”排序。这意味着在第一遍中,单词“kristendom”会被词干化成“kristen”,然后应用所有常规规则,因此它将进一步词干化成“krist”。这样做的效果是“kristen”、“kristendom”、“kristendommen”和“kristendommens”都将词干化成“krist”。

第二遍是选取 -dom 和 -het 结尾。考虑以下示例

一遍 两遍

之前

之后

之前

之后

forlegen

forleg

forlegen

forleg

forlegenhet

forlegen

forlegenhet

forleg

forlegenheten

forlegen

forlegenheten

forleg

forlegenhetens

forlegen

forlegenhetens

forleg

firkantet

firkant

firkantet

firkant

firkantethet

firkantet

firkantethet

firkant

firkantetheten

firkantet

firkantetheten

firkant

工厂类: solr.NorwegianLightStemFilterFactory

参数

变体

可选

默认值:nb

要使用的挪威语变体。有效值为

  • nb: 博克马尔语

  • nn: 新挪威语

  • no: 两者

示例

带有名称

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter name="norwegianLightStem"/>
  </analyzer>
</fieldType>

带有类名(旧版)

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter class="solr.NorwegianLightStemFilterFactory"/>
  </analyzer>
</fieldType>

输入: “Forelskelsen”

分词器到过滤器: “forelskelsen”

输出: “forelske”

挪威语最小词干提取器

NorwegianMinimalStemFilterFactory 仅对挪威语名词的复数形式进行词干提取。

工厂类: solr.NorwegianMinimalStemFilterFactory

参数

变体

可选

默认值:nb

要使用的挪威语变体。有效值为

  • nb: 博克马尔语

  • nn: 新挪威语

  • no: 两者

示例

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter name="norwegianMinimalStem"/>
  </analyzer>
</fieldType>

输入: “Bilens”

分词器到过滤器: “bilens”

输出: “bil”

挪威语规范化过滤器

此过滤器通过将可互换的斯堪的纳维亚字符 æÆäÄöÖøØåÅ 及其折叠变体(ae、oe 和 aa)转换为 æÆøØåÅ 来规范化其使用。这是 ScandinavianNormalizationFilter 的一种变体,其折叠规则针对挪威语进行了定制。

工厂类: solr.NorwegianNormalizationFilterFactory

参数:

示例

带有名称

<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="norwegianNormalization"/>
</analyzer>

带有类名(旧版)

<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NorwegianNormalizationFilterFactory"/>
</analyzer>

输入: “blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj”

分词器到过滤器: “blåbærsyltetøy”、“blåbärsyltetöy”、“blaabaersyltetoey”、“blabarsyltetoy”

输出: “blåbærsyltetøy”、“blåbærsyltetøy”、“blåbærsyltetøy”、“blabarsyltetoy”

波斯语

波斯语过滤器工厂

Solr 包含对波斯语规范化的支持,而 Lucene 包含一个示例停用词列表。

工厂类: solr.PersianNormalizationFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="arabicNormalization"/>
  <filter name="persianNormalization"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ArabicNormalizationFilterFactory"/>
  <filter class="solr.PersianNormalizationFilterFactory"/>
</analyzer>

波兰语

Solr 在 `analysis-extras` 模块中使用 `solr.StempelPolishStemFilterFactory` 提供波兰词干支持,并使用 `solr.MorphologikFilterFactory` 进行词形还原。`solr.StempelPolishStemFilterFactory` 组件包含波兰语的算法词干分析器。要使用此分词器,您必须启用 analysis-extras 模块

工厂类:solr.StempelPolishStemFilterFactorysolr.MorfologikFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="stempelPolishStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.StempelPolishStemFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="morfologik" dictionary="morfologik/stemming/polish/polish.dict"/>
  <filter name="lowercase"/>
</analyzer>

输入:""studenta studenci"

分词器到过滤器:"studenta"、"studenci"

输出:"student"、"student"

可在 Lucene javadocs 中找到有关 Stempel 词干分析器的更多信息。

请注意,小写过滤器在 Morfologik 词干分析器之后应用;这是因为波兰语词典包含专有名词,因此正确的术语大小写对于解决歧义(甚至查找正确的词形)非常重要。

Morfologik 词典参数值是一个常量,用于指定要选择的词典。词典资源必须命名为 path/to/language.dict,并具有关联的 .info 元数据文件。有关详细信息,请参阅 Morfologik 项目。如果未提供词典属性,则默认加载并使用波兰语词典。

葡萄牙语

Solr 包含四种葡萄牙语词干分析器:一种在 `solr.SnowballPorterFilterFactory` 中,一种称为 `solr.PortugueseStemFilterFactory` 的备用词干分析器,一种称为 `solr.PortugueseLightStemFilterFactory` 的轻量级词干分析器,以及一种称为 `solr.PortugueseMinimalStemFilterFactory` 的更不激进的词干分析器。Lucene 包含一个示例停用词列表。

工厂类:solr.PortugueseStemFilterFactorysolr.PortugueseLightStemFilterFactorysolr.PortugueseMinimalStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.PortugueseStemFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseLightStem"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseMinimalStem"/>
</analyzer>

输入:“praia praias”

分词器到过滤器:“praia”、“praias”

输出:“pra”、“pra”

罗马尼亚语

Solr 可以使用 Snowball Porter 词干分析器对罗马尼亚语进行词干分析,参数为 language="Romanian"

工厂类: solr.SnowballPorterFilterFactory

参数

语言

必需

默认值:无

词干分析器语言,在本例中为 Romanian

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="wnowballPorter" language="Romanian" />
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Romanian" />
</analyzer>

俄语

俄语词干过滤器

Solr 包含两种俄语词干分析器:一种在 `solr.SnowballPorterFilterFactory language="Russian" 中,一种称为 `solr.RussianLightStemFilterFactory` 的轻量级词干分析器。Lucene 包含一个示例停用词列表。

工厂类:solr.RussianLightStemFilterFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="russianLightStem"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.RussianLightStemFilterFactory"/>
</analyzer>

斯堪的纳维亚语

斯堪的纳维亚语是一个语言组,跨越三种非常相似的语言 挪威语瑞典语丹麦语

瑞典语中的 å、ä、ö 实际上与挪威语和丹麦语中的 å、æ、ø 相同,因此在这些语言之间使用时可以互换。但是,当人们在缺少这些字符的键盘上键入它们时,它们的折叠方式有所不同。

在这种情况下,几乎所有瑞典人都使用 a、a、o 代替 å、ä、ö。另一方面,挪威人和丹麦人通常键入 aa、ae 和 oe 代替 å、æ 和 ø。然而,有些人确实使用 a、a、o、oo、ao,有时还使用以上所有内容的排列。

有两种过滤器可以帮助实现斯堪的纳维亚语之间的规范化:一种是 solr.ScandinavianNormalizationFilterFactory,它尝试保留特殊字符 (æäöå),另一种是 solr.ScandinavianFoldingFilterFactory,它将这些字符折叠为更宽泛的 ø/ö → o 等。

另请参阅每种语言部分以了解其他相关过滤器。

斯堪的纳维亚语规范化过滤器

此过滤器通过将可互换的斯堪的纳维亚语字符 æÆäÄöÖøØ 和折叠变体 (aa、ao、ae、oe 和 oo) 转换为 åÅæÆøØ 来规范化使用。

ScandinavianFoldingFilter 相比,它是一种语义破坏性较小的解决方案,当使用挪威语或丹麦语键盘的人员查询瑞典语索引时最有用,反之亦然。此过滤器执行 å 和 ä 到 a 的常见瑞典语折叠,也不执行 ö 到 o 的折叠。

工厂类: solr.ScandinavianNormalizationFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="scandinavianNormalization"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ScandinavianNormalizationFilterFactory"/>
</analyzer>

输入: “blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj”

要过滤的分词器:“blåbærsyltetøj”、“blåbärsyltetöj”、“blaabaersyltetoej”、“blabarsyltetoj”

输出:“blåbærsyltetøj”、“blåbærsyltetøj”、“blåbærsyltetøj”、“blabarsyltetoj”

斯堪的纳维亚语折叠过滤器

此过滤器将斯堪的纳维亚语字符 åÅäæÄÆ → a 和 öÖøØ → o 折叠。它还禁止使用双元音 aa、ae、ao、oe 和 oo,只保留第一个。

ScandinavianNormalizationFilter 相比,它是一种语义破坏性更大的解决方案,但还可以帮助将 raksmorgas 与 räksmörgås 匹配。

工厂类: solr.ScandinavianFoldingFilterFactory

参数:

示例

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="scandinavianFolding"/>
</analyzer>

输入: “blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj”

要过滤的分词器:“blåbærsyltetøj”、“blåbärsyltetöj”、“blaabaersyltetoej”、“blabarsyltetoj”

输出:“blabarsyltetoj”、“blabarsyltetoj”、“blabarsyltetoj”、“blabarsyltetoj”

塞尔维亚语

塞尔维亚语规范化过滤器

Solr 包含一个过滤器,可以规范化塞尔维亚语西里尔字母和拉丁字母。请注意,此过滤器仅适用于小写输入。

有关使用此过滤器的用户提示和建议,请参阅 Solr Wiki 中的 塞尔维亚语语言支持

工厂类: solr.SerbianNormalizationFilterFactory

参数

理发

可选

默认值:bald

选择标准化的范围。有效值是

  • bald:西里尔字母首先转换为拉丁字母;然后,拉丁字母的变音符号将被移除,但 带划线的拉丁小写字母 D (U+0111) 除外,它将转换为“dj

  • regular:仅应用西里尔字母到拉丁字母的标准化,保留拉丁字母的变音符号

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="serbianNormalization" haircut="bald"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SerbianNormalizationFilterFactory" haircut="bald"/>
</analyzer>

西班牙语

Solr 包含两个西班牙语词干分析器:一个在 solr.SnowballPorterFilterFactory language="Spanish" 中,另一个更轻量的词干分析器称为 solr.SpanishLightStemFilterFactory。Lucene 包含一个示例停用词列表。

工厂类: solr.SpanishStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="spanishLightStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SpanishLightStemFilterFactory"/>
</analyzer>

输入:“torear toreara torearlo”

分词器到过滤器:“torear”、“toreara”、“torearlo”

输出:“tor”、“tor”、“tor”

瑞典语

瑞典语词干过滤器

Solr 包含两个瑞典语词干分析器:一个在 solr.SnowballPorterFilterFactory language="Swedish" 中,另一个更轻量的词干分析器称为 solr.SwedishLightStemFilterFactory。Lucene 包含一个示例停用词列表。

工厂类: solr.SwedishStemFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="swedishLightStem"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SwedishLightStemFilterFactory"/>
</analyzer>

输入:“kloke klokhet klokheten”

分词器到过滤器:“kloke”、“klokhet”、“klokheten”

输出:“klok”、“klok”、“klok”

泰语

此过滤器将泰语字符序列转换为单个泰语单词。与欧洲语言不同,泰语不使用空格来分隔单词。

工厂类: solr.ThaiTokenizerFactory

参数:

示例

带有名称

<analyzer type="index">
  <tokenizer name="thai"/>
  <filter name="lowercase"/>
</analyzer>

带有类名(旧版)

<analyzer type="index">
  <tokenizer class="solr.ThaiTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

土耳其语

Solr 包含对土耳其语词干分析的支持,使用 solr.SnowballPorterFilterFactory;对不区分大小写搜索的支持,使用 solr.TurkishLowerCaseFilterFactory;对使用 solr.ApostropheFilterFactory 剥离撇号和后续后缀的支持(参见 撇号在土耳其信息检索中的作用);对通过 solr.TruncateTokenFilterFactory 截断令牌达到可配置最大长度的词干分析形式的支持(参见 土耳其语文本的信息检索);Lucene 包含一个示例停用词列表。

工厂类: solr.TurkishLowerCaseFilterFactory

参数:

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="apostrophe"/>
  <filter name="turkishLowercase"/>
  <filter name="snowballPorter" language="Turkish"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ApostropheFilterFactory"/>
  <filter class="solr.TurkishLowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
</analyzer>

另一个示例,说明不区分变音符号的搜索

<analyzer>
  <tokenizer name="standard"/>
  <filter name="apostrophe"/>
  <filter name="turkishLowercase"/>
  <filter name="asciiFoldingFilterFactory" preserveOriginal="true"/>
  <filter name="keywordRepeat"/>
  <filter name="truncate" prefixLength="5"/>
  <filter name="removeDuplicates"/>
</analyzer>

乌克兰语

Solr 在 analysis-extras 模块中通过 solr.MorphologikFilterFactory 提供对乌克兰语词形还原的支持。要使用此过滤器,您必须启用 analysis-extras 模块

Lucene 还包含一个示例乌克兰语停用词列表,位于 lucene-analyzers-morfologik jar 中。

工厂类: solr.MorfologikFilterFactory

参数

dictionary

必需

默认值:无

词形还原词典的路径。lucene-analyzers-morfologik jar 在 org/apache/lucene/analysis/uk/ukrainian.dict 中包含一个乌克兰语词典。

示例

带有名称

<analyzer>
  <tokenizer name="standard"/>
  <filter name="stop" words="org/apache/lucene/analysis/uk/stopwords.txt"/>
  <filter name="lowercase"/>
  <filter name="morfologik" dictionary="org/apache/lucene/analysis/uk/ukrainian.dict"/>
</analyzer>

带有类名(旧版)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="org/apache/lucene/analysis/uk/stopwords.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.MorfologikFilterFactory" dictionary="org/apache/lucene/analysis/uk/ukrainian.dict"/>
</analyzer>

Morfologik dictionary 参数值是一个指定要选择哪个词典的常量。词典资源必须命名为 path/to/language.dict,并具有关联的 .info 元数据文件。有关详细信息,请参阅 Morfologik 项目。如果未提供词典属性,则默认加载和使用波兰语词典。

分析扩展模块

上面列出的许多语言功能都受 analysis-extras Solr 模块 支持,该模块需要在使用前启用。

可以在 模块的自述文件 中找到有关所需特定 jar 文件的其他详细信息。