語言分析
本節包含關於斷詞器和篩選器的資訊,這些斷詞器和篩選器與字元集轉換相關,或用於特定的語言。
對於歐洲語言,斷詞相當簡單。詞語以空白字元和/或相對較小的一組標點符號字元分隔。
在其他語言中,斷詞規則通常不是那麼簡單。某些歐洲語言可能也需要特殊的斷詞規則,例如用於分解德文字的規則。
有關索引時的語言偵測資訊,請參閱語言偵測。
KeywordMarkerFilterFactory
保護詞語不被詞幹分析器修改。可以使用結構描述中的「protected」屬性指定自訂的受保護詞語清單。受保護詞語清單中的任何詞語都不會被 Solr 中的任何詞幹分析器修改。
可以在 sample_techproducts_configs
configset 目錄中找到包含註解的範例 Solr protwords.txt
-
具有名稱
-
具有類別名稱 (舊版)
<fieldtype name="myfieldtype" class="solr.TextField">
<analyzer>
<tokenizer name="whitespace"/>
<filter name="keywordMarker" protected="protwords.txt" />
<filter name="porterStem" />
</analyzer>
</fieldtype>
<fieldtype name="myfieldtype" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
<filter class="solr.PorterStemFilterFactory" />
</analyzer>
</fieldtype>
KeywordRepeatFilterFactory
發出每個詞語兩次,一次帶有 KEYWORD
屬性,一次不帶有該屬性。
如果放置在詞幹分析器之前,結果將是您將獲得未詞幹分析的詞語,其位置與詞幹分析後的詞語相同。符合原始確切詞語的查詢將獲得更好的分數,同時仍然保持詞幹分析的召回好處。保留原始詞語的另一個優點是,萬用字元截斷將按預期工作。
若要設定,請在分析鏈的早期加入 KeywordRepeatFilterFactory
。建議也加入 RemoveDuplicatesTokenFilterFactory
,以避免詞語未經詞幹分析時出現重複項。
範例 fieldType 設定可能如下所示
-
具有名稱
-
具有類別名稱 (舊版)
<fieldtype name="english_stem_preserve_original" class="solr.TextField">
<analyzer>
<tokenizer name="standard"/>
<filter name="keywordRepeat" />
<filter name="porterStem" />
<filter name="removeDuplicates" />
</analyzer>
</fieldtype>
<fieldtype name="english_stem_preserve_original" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KeywordRepeatFilterFactory" />
<filter class="solr.PorterStemFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
</fieldtype>
當加入相同的詞元兩次時,也會得到雙倍的分數(加倍),因此您可能需要重新調整您的排名規則。 |
StemmerOverrideFilterFactory
透過應用自訂的映射來覆寫詞幹演算法,然後保護這些詞彙不被詞幹分析器修改。
可以在 schema 中的 dictionary
屬性中指定一個自訂的單字到詞幹的映射,以 Tab 字元分隔的檔案形式呈現。此映射中的單字會被詞幹分析為檔案中的詞幹,並且不會被任何詞幹分析器進一步修改。
-
具有名稱
-
具有類別名稱 (舊版)
<fieldtype name="myfieldtype" class="solr.TextField">
<analyzer>
<tokenizer name="whitespace"/>
<filter name="stemmerOverride" dictionary="stemdict.txt" />
<filter name="porterStem" />
</analyzer>
</fieldtype>
<fieldtype name="myfieldtype" class="solr.TextField">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" />
<filter class="solr.PorterStemFilterFactory" />
</analyzer>
</fieldtype>
以下顯示了一個範例 stemdict.txt
檔案
# these must be tab-separated
monkeys monkey
otters otter
# some crazy ones that a stemmer would never do
dogs cat
如果您在本地端有 Solr 的原始碼結帳副本,您也可以在 Solr 的測試資源中的 solr/core/src/test-files/solr/collection1/conf/stemdict.txt
找到這個範例。
字典複合字詞元過濾器
此過濾器使用組成單字的字典將複合字詞分割或解構成個別單字。每個輸入詞元都會保持不變地傳遞。如果它也可以被解構成子單字,則每個子單字也會在相同的邏輯位置新增到串流中。
複合字詞最常見於日耳曼語系語言中。
工廠類別: solr.DictionaryCompoundWordTokenFilterFactory
引數
dictionary
-
必要
預設值:無
包含簡單單字清單的檔案路徑,每行一個單字。空白行和以「#」開頭的行會被忽略。
請參閱資源載入以取得更多資訊。
minWordSize
-
可選
預設值:
5
任何短於此值的詞元都不會被解構。
minSubwordSize
-
可選
預設值:
2
短於此值的子單字不會作為詞元發出。
maxSubwordSize
-
可選
預設值:
15
長於此值的子單字不會作為詞元發出。
onlyLongestMatch
-
可選
預設值:
true
如果為
true
,則只有最長的匹配子單字才會產生新的詞元。
範例
假設 germanwords.txt
至少包含以下單字:dumm kopf donau dampf schiff
-
具有名稱
-
具有類別名稱 (舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="dictionaryCompoundWord" dictionary="germanwords.txt"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="germanwords.txt"/>
</analyzer>
輸入: "Donaudampfschiff dummkopf"
詞元分析器至過濾器: "Donaudampfschiff"(1), "dummkopf"(2),
輸出: "Donaudampfschiff"(1), "Donau"(1), "dampf"(1), "schiff"(1), "dummkopf"(2), "dumm"(2), "kopf"(2)
Unicode 校對
Unicode 校對是一種對語言敏感的文字排序方法,也可用於進階搜尋目的。
Solr 中的 Unicode 校對速度很快,因為所有工作都在索引時間完成。
solr.CollationField
和 solr.ICUCollationField
欄位類型類別提供了此功能,而不是在 <fieldtype … class="solr.TextField">
中指定分析器。solr.ICUCollationField
由 ICU4J 程式庫支援,提供更靈活的配置、更多的語言環境、速度明顯更快,並需要更少的記憶體和索引空間,因為它的鍵比 JDK 實作產生的鍵小,而 JDK 實作是 solr.CollationField
的後盾。
若要使用 solr.ICUCollationField
,您必須啟用分析額外模組。
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 元件,您必須啟用分析額外模組。
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 詞性過濾器
此過濾器會將每個 token 的 type 屬性設定為已設定模型所指定的詞性 (POS)。請參閱OpenNLP 網站,以取得有關下載預先訓練模型之資訊。
Lucene 目前不會為 token 類型建立索引,因此如果您想要保留此資訊,則必須將其保留在 payload 中或作為同義詞;請參閱以下範例。 |
工廠類別: solr.OpenNLPPOSFilterFactory
引數
posTaggerModel
-
必要
預設值:無
語言專屬 OpenNLP POS 標記模型檔案的路徑。請參閱資源載入以取得更多資訊。
範例
OpenNLP 斷詞器會將標點符號斷詞,這對於後續的 token 過濾器很有用。通常您不會想在索引中包含標點符號,因此以下範例中包含了TypeTokenFilter
,其中 stop.pos.txt
包含以下內容
#
$
''
``
,
-LRB-
-RRB-
:
.
將每個 token 的 POS 作為 payload 建立索引
-
具有名稱
-
具有類別名稱 (舊版)
<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>
將每個 token 的 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 片語分塊模型的輸出設定每個 token 的 type 屬性。區塊標籤會取代先前在每個 token 的 type 屬性中的 POS 標籤。請參閱OpenNLP 網站,以取得有關下載預先訓練模型之資訊。
先決條件:OpenNLP 斷詞器和OpenNLP 詞性過濾器必須在此過濾器之前執行。
Lucene 目前不會為 token 類型建立索引,因此如果您想要保留此資訊,則必須將其保留在 payload 中或作為同義詞;請參閱以下範例。 |
工廠類別: solr.OpenNLPChunkerFilterFactory
引數
chunkerModel
-
必要
預設值:無
語言專屬 OpenNLP 片語分塊模型檔案的路徑。請參閱資源載入以取得更多資訊。
範例:
將每個 token 的片語區塊標籤作為 payload 建立索引
-
具有名稱
-
具有類別名稱 (舊版)
<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>
將每個 token 的片語區塊標籤作為同義詞建立索引,並在標籤前加上「#」字元(請參閱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 詞形還原過濾器
此過濾器會以每個 token 的詞元取代其文字。支援基於字典的詞形還原器和基於模型的詞形還原器。如果兩者都已設定,則會先嘗試基於字典的詞形還原器,然後再查詢基於模型的詞形還原器以取得超出詞彙表的 token。請參閱OpenNLP 網站,以取得有關下載預先訓練模型之資訊。
工廠類別: solr.OpenNLPLemmatizerFilter
引數
必須提供 dictionary
或 lemmatizerModel
其中一個,且兩者皆可提供 - 請參閱以下範例
範例
執行基於字典的詞形還原,並針對超出詞彙表的 token 退回至基於模型的詞形還原(請參閱上方的OpenNLP 詞性過濾器一節,以取得有關使用 TypeTokenFilter
以避免為標點符號建立索引的資訊)
-
具有名稱
-
具有類別名稱 (舊版)
<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>
僅執行基於模型的詞形還原,保留原始 token 並將詞元做為同義詞發出(請參閱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 文字分割演算法中非中文文字的斷詞規則,並使用字典來分割中文單字。
若要使用此斷詞器,您必須啟用分析額外模組。
標準斷詞器也可以用來將繁體中文文字斷詞。遵循 Unicode 文字分割演算法中的斷詞規則,它會為每個中文字元產生一個 token。與CJK Bigram 過濾器結合使用時,會形成重疊的中文字元 bigram。
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 Bigram 過濾器
根據預設,所有 CJK 字元都會產生 bigram,但可以透過指定正寫類型引數 han
、hiragana
、katakana
和 hangul
來進行更細微的控制。設定為 false
時,對應類型的字元將會以 unigram 的形式傳遞,且不會包含在任何 bigram 中。
當 CJK 字元沒有相鄰的字元可形成 bigram 時,會以 unigram 形式輸出。如果您想要一律同時輸出 unigram 和 bigram,請將 outputUnigrams
引數設定為 true
。
在所有情況下,所有非 CJK 輸入都會以未修改的形式傳遞。
引數
han
-
可選
預設值:
true
如果為
false
,則漢字 (中文) 字元不會形成 bigram。 hiragana
-
可選
預設值:
true
如果為
false
,則平假名 (日文) 字元不會形成 bigram。 katakana
-
可選
預設值:
true
如果為
false
,則片假名 (日文) 字元不會形成 bigram。 hangul
-
可選
預設值:
true
如果為
false
,則韓文 (韓文) 字元不會形成 bigram。 outputUnigrams
-
可選
預設值:
false
如果為
true
,除了形成 bigram 之外,所有字元也會以 unigram 的形式傳遞。
請參閱繁體中文下的範例。
簡體中文
對於中文分析也很有用
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
進行中文句子和單字分割。此元件包含大型字典,並使用隱藏式馬可夫模型將中文文字分割成單字。若要使用此斷詞器,您必須啟用分析額外模組。
工廠類別: 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
設定集中的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 包含一個範例停用詞清單。
另一個選項是使用 Snowball Porter 詞幹提取器,並帶有 language="Norwegian" 的參數。
對於正規化,有一個 NorwegianNormalizationFilterFactory
,它是 斯堪的納維亞正規化篩選器 的變體,但具有針對挪威語調整的折疊規則。
挪威語輕型詞幹提取器
NorwegianLightStemFilterFactory
需要對 -dom 和 -het 結尾進行「兩次傳遞」排序。這表示在第一次傳遞中,單字 "kristendom" 會詞幹提取為 "kristen",然後套用所有一般規則,因此會進一步詞幹提取為 "krist"。這樣做的效果是 "kristen"、"kristendom"、"kristendommen" 和 "kristendommens" 都會詞幹提取為 "krist"。
第二次傳遞是選取 -dom 和 -het 結尾。請考慮以下範例
一次傳遞 | 兩次傳遞 | ||
---|---|---|---|
之前 |
之後 |
之前 |
之後 |
forlegen |
forleg |
forlegen |
forleg |
forlegenhet |
forlegen |
forlegenhet |
forleg |
forlegenheten |
forlegen |
forlegenheten |
forleg |
forlegenhetens |
forlegen |
forlegenhetens |
forleg |
firkantet |
firkant |
firkantet |
firkant |
firkantethet |
firkantet |
firkantethet |
firkant |
firkantetheten |
firkantet |
firkantetheten |
firkant |
工廠類別: solr.NorwegianLightStemFilterFactory
引數
variant
-
可選
預設值:
nb
要使用的挪威語變體。有效值為
-
nb:
Bokmål -
nn:
Nynorsk -
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:
Bokmål -
nn:
Nynorsk -
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 可以使用 Snowball Porter 詞幹提取器並帶有 language="Romanian"
的參數來提取羅馬尼亞語詞幹。
工廠類別: 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
引數
髮型
-
可選
預設值:
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
。
Light 變體基於簡單規則,會移除像 -het
、-heten
、-else
、-elser
等字尾,而 Minimal 變體只會嘗試正規化單數/複數結尾,例如 -er
、-ar
、-arne
等。有關更多資訊,請參閱Lucene javadocs。
已知瑞典語 Light 和 Minimal 詞幹分析器會產生許多衝突的詞幹,嚴重損害搜尋精確度。可能需要提供廣泛的自訂詞幹分析器對應列表來抵消此問題,例如使用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
支援在可設定的最大長度處截斷 Token 的詞幹分析形式(請參閱土耳其語文本的資訊檢索);並且 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 專案。如果未提供 dictionary 屬性,則會載入並預設使用波蘭語字典。
分析額外模組
上面列出的許多語言功能都受到 analysis-extras
Solr 模組的支援,使用前需要啟用該模組。
有關所需特定 jar 檔案的更多詳細資訊,請參閱模組的 README。