语言分析

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

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

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

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

KeywordMarkerFilterFactory

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

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

  • 使用名称

  • 使用类名称(旧版)

<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

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

在 schema 中的 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

字典复合词 Token 过滤器

此过滤器使用组件词的字典将复合词分割或分解成单个词。每个输入 token 将原样传递。如果它也可以被分解成子词,则每个子词也会以相同的逻辑位置添加到流中。

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

工厂类: solr.DictionaryCompoundWordTokenFilterFactory

参数

dictionary

必需

默认值:无

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

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

minWordSize

可选

默认值:5

任何短于此值的 token 都不会被分解。

minSubwordSize

可选

默认值:2

短于此值的子词不会作为 token 发出。

maxSubwordSize

可选

默认值:15

长于此值的子词不会作为 token 发出。

onlyLongestMatch

可选

默认值:true

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

示例

假设 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 校对速度很快,因为所有工作都在索引时完成。

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

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

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

  • 基于与区域设置关联的系统校对器。

  • 基于定制的 RuleBasedCollator 规则集。

ICUCollationField 属性

使用系统校对器

locale

必需

默认值:无

RFC 3066 区域设置 ID。

strength

可选

默认值:无

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

decomposition

可选

默认值:无

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

使用定制的规则集

custom

必需

默认值:无

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

strength

可选

默认值:无

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

decomposition

可选

默认值:无

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

专家选项

alternate

可选

默认值:无

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

caseLevel

可选

默认值:false

如果为 true,并且与 strength="primary" 结合使用,则会忽略重音符号,但会考虑大小写。有关更多信息,请参阅ICU 校对概念中的 CaseLevel

caseFirst

可选

默认值:无

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

numeric

可选

默认值:false

如果为 true,则数字将按照数值排序,例如,foobar-9 会排在 foobar-10 之前。

variableTop

可选

默认值:无

单个字符或缩写。控制 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"/>
...
<!-- 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 支持的 Java 区域设置列表

language

必需

默认值:无

ISO-639 语言代码。

country

可选

默认值:无

ISO-3166 国家/地区代码。

variant

可选

默认值:无

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

strength

可选

默认值:无

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

decomposition

可选

默认值:无

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

使用定制的规则集:

custom

必需

默认值:无

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

strength

可选

默认值:无

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

decomposition

可选

默认值:无

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

一个 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" />
...
<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.ArabicStemFilterFactory, solr.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.BengaliStemFilterFactory, solr.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

参数

language:

+

必需

默认值:无

+ 此处的词干提取器语言为 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

参数

language

必需

默认值:无

此处的词干提取器语言为 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

参数

language

必需

默认值:无

此处的词干提取器语言为 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

参数

language

必需

默认值:无

此处的词干提取器语言为 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

参数

articles

可选

默认值:无

一个文件的路径名,该文件包含要删除的文章列表,每行一个。文章是诸如 "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

参数

language

必需

默认值:无

此处的词干提取器语言为 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 变体折叠为等效的基本拉丁形式,并将半角片假名变体折叠为等效的全角形式。

日语迭代标记字符过滤器

将水平日语迭代标记(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

参数

tags

可选

默认值:无

一个文件列表的文件名,该列表包含要删除术语的词性。请参阅 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 包括一个示例停用词列表。

另一个选项是使用带有 language="Norwegian" 参数的 Snowball Porter 词干提取器。

对于规范化,有一个 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

参数

variant

可选

默认值: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

参数

variant

可选

默认值: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”

有关 Stempel 词干提取器的更多信息,请参阅 Lucene javadocs

请注意,小写过滤器在 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 可以使用带有参数 language="Romanian" 的 Snowball Porter 词干提取器提取罗马尼亚语词干。

工厂类: solr.SnowballPorterFilterFactory

参数

language

必需

默认值:无

词干提取器语言,在本例中为 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

参数

haircut

可选

默认值: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,以及一个最小化的词干提取器 solr.SwedishMinimalStemFilterFactory

轻量级变体基于简单规则,删除诸如 -het-heten-else-elser 等后缀,而最小化变体仅尝试规范化单数/复数结尾,例如 -er-ar-arne 等。有关更多信息,请参阅 Lucene javadocs

众所周知,瑞典语轻量级和最小化词干提取器会产生许多冲突的词干,从而显著损害搜索精度。可能需要提供大量的自定义词干映射列表来抵消这种情况,例如使用 StemmerOverrideFilter

Lucene 包括一个示例停用词列表。

工厂类: solr.SwedishStemFilterFactorysolr.SwedishLightStemFilterFactorysolr.SwedishMinimalStemFilterFactory

参数:

示例 (SwedishLightStemFilterFactory)

  • 使用名称

  • 使用类名称(旧版)

<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 模块

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

有关所需特定 jar 文件的更多详细信息,请参阅 模块的 README