语言分析
本节包含有关与字符集转换或用于特定语言的分词器和过滤器的信息。
对于欧洲语言,分词相对简单。标记由空格和/或相对较小的一组标点符号分隔。
在其他语言中,分词规则通常不是那么简单。一些欧洲语言也可能需要特殊的分词规则,例如用于分解德语单词的规则。
有关索引时进行语言检测的信息,请参阅语言检测。
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.CollationField
和 solr.ICUCollationField
字段类型类提供了此功能,而不是在 <fieldtype … class="solr.TextField">
中指定分析器。solr.ICUCollationField
由 ICU4J 库支持,它提供了更灵活的配置、更多的区域设置、速度更快,并且需要的内存和索引空间更少,因为它的键比支持 solr.CollationField
的 JDK 实现生成的键要小。
要使用 solr.ICUCollationField
,您必须启用 analysis-extras 模块。
solr.ICUCollationField
和 solr.CollationField
字段可以通过两种方式创建
-
基于与区域设置关联的系统校对器。
-
基于定制的
RuleBasedCollator
规则集。
ICUCollationField 属性
使用系统校对器
locale
-
必需
默认值:无
RFC 3066 区域设置 ID。
strength
-
可选
默认值:无
有效值为
primary
、secondary
、tertiary
、quaternary
或identical
。有关更多信息,请参阅ICU 校对概念中的比较级别。 decomposition
-
可选
默认值:无
有效值为
no
或canonical
。有关更多信息,请参阅ICU 校对概念中的规范化。
使用定制的规则集
custom
-
必需
默认值:无
指向包含 ICU
RuleBasedCollator
支持的规则的 UTF-8 文本文件的路径 strength
-
可选
默认值:无
有效值为
primary
、secondary
、tertiary
、quaternary
或identical
。有关更多信息,请参阅ICU 校对概念中的比较级别。 decomposition
-
可选
默认值:无
有效值为
no
或canonical
。有关更多信息,请参阅ICU 校对概念中的规范化。
专家选项
alternate
-
可选
默认值:无
有效值为
shifted
或non-ignorable
。可用于忽略标点符号或空格。 caseLevel
-
可选
默认值:
false
如果为
true
,并且与strength="primary"
结合使用,则会忽略重音符号,但会考虑大小写。有关更多信息,请参阅ICU 校对概念中的 CaseLevel。 caseFirst
-
可选
默认值:无
有效值为
lower
或upper
。当不忽略大小写时,可用于控制哪个先排序。 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 default
或 ROOT
区域设置的规则旨在适用于大多数语言。要使用 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 校对的原理相同;您只需指定 language
、country
和 variant
参数,而不是组合的 locale
参数。
JDK 校对属性
使用系统校对器(请参阅 Oracle 支持的 Java 区域设置列表)
language
-
必需
默认值:无
ISO-639 语言代码。
country
-
可选
默认值:无
ISO-3166 国家/地区代码。
variant
-
可选
默认值:无
供应商或浏览器特定的代码。
strength
-
可选
默认值:无
有效值为
primary
、secondary
、tertiary
或identical
。有关更多信息,请参阅 Java Collator javadocs。 decomposition
-
可选
默认值:无
有效值为
no
、canonical
或full
。有关更多信息,请参阅 Java Collator javadocs。
使用定制的规则集:
custom
-
必需
默认值:无
指向包含
JDK RuleBasedCollator
支持的规则的 UTF-8 文本文件的路径。 strength
-
可选
默认值:无
有效值为
primary
、secondary
、tertiary
或identical
。有关更多信息,请参阅 Java Collator javadocs。 decomposition
-
可选
默认值:无
有效值为
no
、canonical
或full
。有关更多信息,请参阅 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
参数
示例
-
使用名称
-
使用类名称(旧版)
<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
包含以下内容
#
$
''
``
,
-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
文件包含行 NN
、NNS
、NNP
和 NNPS
<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
参数
必须提供 dictionary
或 lemmatizerModel
,并且可以同时提供两者 - 请参阅以下示例
示例
执行基于字典的词元化,并回退到基于模型的词元化以获取词汇表外的标记(有关使用 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.BengaliNormalizationFilter
和 org.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 双字母组过滤器
默认情况下,所有 CJK 字符都会生成双字母组,但是可以通过指定正字法类型参数 han
、hiragana
、katakana
和 hangul
来进行更精细的控制。当设置为 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.FrenchLightStemFilterFactory
,solr.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.GermanStemFilterFactory
,solr.LightGermanStemFilterFactory
,solr.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.IndicNormalizationFilterFactory
,solr.HindiNormalizationFilterFactory
,solr.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 形态分析器支持日语分析,其中包括多个分析组件 - 以下是每个组件的更多详细信息
-
JapaneseIterationMarkCharFilter
将日语水平迭代标记(odoriji)规范化为其展开形式。 -
JapaneseTokenizer
使用形态分析对日语进行标记化,并使用词性、基本形式(也称为词元)、读法和发音来注释每个术语。 -
JapaneseBaseFormFilter
将原始术语替换为其基本形式(也称为词元)。 -
JapanesePartOfSpeechStopFilter
删除具有已配置词性的术语。 -
JapaneseKatakanaStemFilter
通过删除长音字符来规范化以长音字符 (U+30FC) 结尾的常见片假名拼写变体。
同样适用于日语分析,来自 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
,则会丢弃标点符号。
希伯来语、老挝语、缅甸语、高棉语
除了 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 包括两个用于提取挪威语词干的类:NorwegianLightStemFilterFactory
和 NorwegianMinimalStemFilterFactory
。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.StempelPolishStemFilterFactory
和 solr.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.PortugueseStemFilterFactory
、solr.PortugueseLightStemFilterFactory
、solr.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
参数: 无
示例
输入: “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.SwedishStemFilterFactory
、solr.SwedishLightStemFilterFactory
和 solr.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。