語言分析

本節包含關於斷詞器和篩選器的資訊,這些斷詞器和篩選器與字元集轉換相關,或用於特定的語言。

對於歐洲語言,斷詞相當簡單。詞語以空白字元和/或相對較小的一組標點符號字元分隔。

在其他語言中,斷詞規則通常不是那麼簡單。某些歐洲語言可能也需要特殊的斷詞規則,例如用於分解德文字的規則。

有關索引時的語言偵測資訊,請參閱語言偵測

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.CollationFieldsolr.ICUCollationField 欄位類型類別提供了此功能,而不是在 <fieldtype …​ class="solr.TextField"> 中指定分析器。solr.ICUCollationFieldICU4J 程式庫支援,提供更靈活的配置、更多的語言環境、速度明顯更快,並需要更少的記憶體和索引空間,因為它的鍵比 JDK 實作產生的鍵小,而 JDK 實作是 solr.CollationField 的後盾。

若要使用 solr.ICUCollationField,您必須啟用分析額外模組

solr.ICUCollationFieldsolr.CollationField 欄位可以透過兩種方式建立

  • 基於與語言環境關聯的系統校對器。

  • 基於客製化的 RuleBasedCollator 規則集。

ICUCollationField 屬性

使用系統校對器

locale

必要

預設值:無

RFC 3066 語言環境 ID。

strength

可選

預設值:無

有效值為 primarysecondarytertiaryquaternaryidentical。請參閱 ICU 校對概念中的比較層級 以取得更多資訊。

decomposition

可選

預設值:無

有效值為 nocanonical。請參閱 ICU 校對概念中的正規化 以取得更多資訊。

使用客製化規則集

custom

必要

預設值:無

包含 ICU RuleBasedCollator 支援的規則的 UTF-8 文字檔案路徑

strength

可選

預設值:無

有效值為 primarysecondarytertiaryquaternaryidentical。請參閱 ICU 校對概念中的比較層級 以取得更多資訊。

decomposition

可選

預設值:無

有效值為 nocanonical。請參閱 ICU 校對概念中的正規化 以取得更多資訊。

進階選項

alternate

可選

預設值:無

有效值為 shiftednon-ignorable。可用於忽略標點符號或空白字元。

caseLevel

可選

預設值:false

如果為 true,且與 strength="primary" 結合使用,則會忽略重音符號,但會將大小寫納入考量。請參閱 ICU 校對概念中的 CaseLevel 以取得更多資訊。

caseFirst

可選

預設值:無

有效值為 lowerupper。當不忽略大小寫時,可用於控制哪個優先排序。

numeric

可選

預設值:false

如果為 true,則會根據數值排序數字,例如,foobar-9 會在 foobar-10 之前排序。

variableTop

可選

預設值:無

單一字元或收縮。控制 alternate 的變數。

排序特定語言的文字

在此範例中,文字會根據 ICU4J 提供的預設德語規則進行排序。

語言環境通常定義為語言和國家/地區的組合,但如果您只想指定語言,可以只指定語言。例如,如果您指定「de」作為語言,您將獲得適用於德語的排序。如果您指定「de」作為語言,並指定「CH」作為國家/地區,您將獲得專門為瑞士量身訂做的德語排序。

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

在上述範例中,我們將強度定義為「primary」。校對的強度決定排序順序的嚴格程度,但這也取決於語言。例如,在英文中,「primary」強度會忽略大小寫和重音符號的差異。

另一個範例

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

此類型將用於資料包含波蘭文的欄位。「secondary」強度會忽略大小寫差異,但與「primary」強度不同,帶有變音符號的字母將與沒有變音符號的相同基本字母排序不同。

使用「city_sort」欄位排序的範例

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

排序多種語言的文字

有兩種方法可以支援多種語言:如果您想支援的語言清單很小,請考慮為每種語言定義校對欄位並使用 copyField。但是,新增大量排序欄位會增加磁碟和索引成本。另一種方法是使用 Unicode default 校對器。

Unicode defaultROOT 語言環境具有為大多數語言設計的規則。若要使用 default 語言環境,只需將語言環境定義為空字串即可。這種 Unicode 預設排序仍然比標準 Solr 排序先進得多。

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

使用自訂規則排序文字

您可以定義自己的一組排序規則。最簡單的方法是採用與您想要的規則接近的現有規則,然後進行自訂。

在下面的範例中,我們為德語建立一個稱為 DIN 5007-2 的自訂規則集。此規則集以不同的方式處理德語中的變音符號:它將 ö 視為等於 oe、ä 視為等於 ae,而 ü 視為等於 ue。如需更多資訊,請參閱 ICU RuleBasedCollator javadocs

此範例說明如何為 solr.ICUCollationField 建立自訂規則集並將其傾印到檔案

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

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

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

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

現在,此規則集可用於 Solr 中的自訂校對

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

JDK 校對

如上所述,ICU Unicode 校對在幾個方面都優於 JDK 校對,但如果您因為某些原因無法使用 ICU4J,則可以使用 solr.CollationField

JDK 校對的原則與 ICU 校對的原則相同;您只需指定 languagecountryvariant 引數,而不是組合的 locale 引數。

JDK 校對屬性

使用系統校對器(請參閱Oracle 的 Java 中支援的語言環境清單

language

必要

預設值:無

ISO-639 語言代碼。

country

可選

預設值:無

ISO-3166 國家/地區代碼。

variant

可選

預設值:無

供應商或瀏覽器特定的代碼。

strength

可選

預設值:無

有效值為 primarysecondarytertiaryidentical。請參閱 Java Collator javadocs 以取得更多資訊。

decomposition

可選

預設值:無

有效值為 nocanonicalfull。請參閱 Java Collator javadocs 以取得更多資訊。

使用客製化規則集:

custom

必要

預設值:無

包含 JDK RuleBasedCollator 支援的規則的 UTF-8 文字檔案路徑。

strength

可選

預設值:無

有效值為 primarysecondarytertiaryidentical。請參閱 Java Collator javadocs 以取得更多資訊。

decomposition

可選

預設值:無

有效值為 nocanonicalfull。請參閱 Java Collator javadocs 以取得更多資訊。

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

ASCII & 十進位摺疊過濾器

ASCII 摺疊

此過濾器會將不在前 127 個 ASCII 字元(「基本拉丁」Unicode 區塊)中的字母、數字和符號 Unicode 字元轉換為它們的 ASCII 等效字元(如果存在)。只會轉換具有合理的 ASCII 替代方案的字元。

這可以透過導致更多匹配來增加回想率。另一方面,由於可能會遺失特定語言的字元差異,因此可能會降低精確度。

工廠類別: solr.ASCIIFoldingFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: "Björn Ångström"

詞元分析器至過濾器: "Björn", "Ångström"

輸出: "Bjorn", "Angstrom"

十進位數字摺疊

此過濾器會將 Unicode「十進位數字」一般類別 (Nd) 中的任何字元轉換為其對應的基本拉丁數字 (0-9)。

這可以透過導致更多匹配來增加回想率。另一方面,由於可能會遺失特定語言的字元差異,因此可能會降低精確度。

工廠類別: solr.DecimalDigitFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

OpenNLP 整合

Lucene 模組 lucene/analysis/opennlp 透過多個分析元件提供 OpenNLP 整合:詞元分析器、詞性標記過濾器、片語分塊過濾器和詞形還原過濾器。除了這些分析元件之外,Solr 也提供更新要求處理器來擷取具名實體。另請參閱可以作為外掛程式載入的更新處理器工廠

由於兩個原因,OpenNLP 詞元分析器必須與所有其他 OpenNLP 分析元件搭配使用。首先,OpenNLP 詞元分析器會偵測並標記所有 OpenNLP 過濾器所需的句子邊界。其次,由於這些過濾器使用的預先訓練的 OpenNLP 模型是使用相應的特定語言的句子偵測/詞元分析模型訓練的,因此必須在執行階段使用相同的模型進行相同的詞元分析,才能達到最佳效能。

若要使用 OpenNLP 元件,您必須啟用分析額外模組

OpenNLP 詞元分析器

OpenNLP 詞元分析器會採用兩個特定語言的二進位模型檔案作為參數:句子偵測器模型和詞元分析器模型。每個句子中的最後一個詞元都會被標記,以便後續基於 OpenNLP 的過濾器可以使用此資訊,一次對一個句子中的詞元套用操作。如需下載預先訓練模型相關資訊,請參閱 OpenNLP 網站

工廠類別: solr.OpenNLPTokenizerFactory

引數

sentenceModel

必要

預設值:無

特定語言的 OpenNLP 句子偵測模型檔案路徑。請參閱資源載入以取得更多資訊。

tokenizerModel

必要

預設值:無

語言專屬 OpenNLP 斷詞模型檔案的路徑。請參閱資源載入以取得更多資訊。

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

OpenNLP 詞性過濾器

此過濾器會將每個 token 的 type 屬性設定為已設定模型所指定的詞性 (POS)。請參閱OpenNLP 網站,以取得有關下載預先訓練模型之資訊。

Lucene 目前不會為 token 類型建立索引,因此如果您想要保留此資訊,則必須將其保留在 payload 中或作為同義詞;請參閱以下範例。

工廠類別: solr.OpenNLPPOSFilterFactory

引數

posTaggerModel

必要

預設值:無

語言專屬 OpenNLP POS 標記模型檔案的路徑。請參閱資源載入以取得更多資訊。

範例

OpenNLP 斷詞器會將標點符號斷詞,這對於後續的 token 過濾器很有用。通常您不會想在索引中包含標點符號,因此以下範例中包含了TypeTokenFilter,其中 stop.pos.txt 包含以下內容

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 檔案包含 NNNNSNNPNNPS 等行

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

OpenNLP 片語分塊過濾器

此過濾器會根據 OpenNLP 片語分塊模型的輸出設定每個 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

引數

必須提供 dictionarylemmatizerModel 其中一個,且兩者皆可提供 - 請參閱以下範例

dictionary

可選

預設值:無

詞形還原字典檔案的路徑。請參閱資源載入以取得更多資訊。字典檔案必須以 UTF-8 編碼,每行一個項目,格式為 word[tab]lemma[tab]part-of-speech,例如 wrote[tab]write[tab]VBD

lemmatizerModel

可選

預設值:無

語言專屬 OpenNLP 詞形還原器模型檔案的路徑。請參閱資源載入以取得更多資訊。

範例

執行基於字典的詞形還原,並針對超出詞彙表的 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.ArabicStemFilterFactorysolr.ArabicNormalizationFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="arabicNormalization"/>
  <filter name="arabicStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ArabicNormalizationFilterFactory"/>
  <filter class="solr.ArabicStemFilterFactory"/>
</analyzer>

孟加拉文

有兩個專為處理孟加拉語而寫入的過濾器。他們使用 Lucene 類別 org.apache.lucene.analysis.bn.BengaliNormalizationFilterorg.apache.lucene.analysis.bn.BengaliStemFilter

工廠類別: solr.BengaliStemFilterFactorysolr.BengaliNormalizationFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="bengaliNormalization"/>
  <filter name="bengaliStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.BengaliNormalizationFilterFactory"/>
  <filter class="solr.BengaliStemFilterFactory"/>
</analyzer>

正規化 - মানুষমানুস

詞幹 - সমস্তসমস্

巴西葡萄牙文

這是專為詞幹巴西葡萄牙語方言而寫入的 Java 過濾器。它使用 Lucene 類別 org.apache.lucene.analysis.br.BrazilianStemmer。雖然可以將該詞幹分析器設定為使用受保護的單字清單(不應詞幹),但此工廠不接受任何指定此類清單的引數。

工廠類別: solr.BrazilianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: 「praia praias」

斷詞器至過濾器: 「praia」、「praias」

輸出: 「pra」、「pra」

保加利亞文

Solr 包含保加利亞文的輕量級詞幹器,遵循此演算法 (PDF),而 Lucene 則包含範例停用字清單。

工廠類別: solr.BulgarianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="bulgarianStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.BulgarianStemFilterFactory"/>
</analyzer>

加泰隆尼亞文

Solr 可以使用 Snowball Porter 詞幹器加上引數 language="Catalan" 來詞幹加泰隆尼亞文。Solr 包含一組加泰隆尼亞文的縮寫,可以使用 solr.ElisionFilterFactory 加以移除。

工廠類別: solr.SnowballPorterFilterFactory

引數

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 過濾器

形成由標準斷詞器ICU 斷詞器產生的 CJK 字元的 bigram(重疊的 2 個字元序列)。

根據預設,所有 CJK 字元都會產生 bigram,但可以透過指定正寫類型引數 hanhiraganakatakanahangul 來進行更細微的控制。設定為 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 的形式傳遞。

請參閱繁體中文下的範例。

簡體中文

對於簡體中文,Solr 支援使用HMM 中文斷詞器進行中文句子和單字分割。此元件包含大型字典,並使用隱藏式馬可夫模型將中文文字分割成單字。若要使用此斷詞器,您必須啟用分析額外模組

ICU 斷詞器的預設組態也適用於簡體中文文字。它遵循 Unicode 文字分割演算法中非中文文字的斷詞規則,並使用字典來分割中文單字。若要使用此斷詞器,您必須啟用分析額外模組

對於中文分析也很有用

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.FrenchLightStemFilterFactorysolr.FrenchMinimalStemFilterFactory

引數:

範例

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

輸入: "le chat, les chats"

分詞器到過濾器: "le", "chat", "les", "chats"

輸出: "le", "chat", "le", "chat"

加利西亞語

Solr 包含一個加利西亞語詞幹分析器,它遵循 此演算法,而 Lucene 包含範例的停用詞列表。

工廠類別: solr.GalicianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="galicianStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.GalicianStemFilterFactory"/>
</analyzer>

輸入: "felizmente Luzes"

分詞器到過濾器: "felizmente", "luzes"

輸出: "feliz", "luz"

德語

Solr 包含四種德語詞幹分析器:一種位於 solr.SnowballPorterFilterFactory language="German" 中、一種稱為 solr.GermanStemFilterFactory 的詞幹分析器、一種稱為 solr.GermanLightStemFilterFactory 的輕量詞幹分析器,以及一種稱為 solr.GermanMinimalStemFilterFactory 的較不積極的詞幹分析器。Lucene 包含範例的停用詞列表。

工廠類別: solr.GermanStemFilterFactorysolr.LightGermanStemFilterFactorysolr.MinimalGermanStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: "haus häuser"

分詞器到過濾器: "haus", "häuser"

輸出: "haus", "haus"

希臘語

此過濾器會將希臘文字集中的大寫字母轉換為對應的小寫字母。

工廠類別: solr.GreekLowerCaseFilterFactory

引數:

自 Solr 3.1 起不再支援使用自訂字元集。如果您需要在這些編碼中索引文字,請在 I/O 期間使用 Java 的字元集轉換功能 (InputStreamReader 等),以便 Lucene 可以將此文字當作 Unicode 進行分析。

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

印地語

Solr 包含對印地語詞幹分析的支援,它遵循 此演算法 (PDF)、支援透過 solr.HindiNormalizationFilterFactory 處理常見的拼寫差異、支援透過 solr.IndicNormalizationFilterFactory 處理編碼差異,它遵循 此演算法,而 Lucene 則包含範例的停用詞列表。

工廠類別: solr.IndicNormalizationFilterFactorysolr.HindiNormalizationFilterFactorysolr.HindiStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="indicNormalization"/>
  <filter name="hindiNormalization"/>
  <filter name="hindiStem"/>
</analyzer>
<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.IndicNormalizationFilterFactory"/>
  <filter class="solr.HindiNormalizationFilterFactory"/>
  <filter class="solr.HindiStemFilterFactory"/>
</analyzer>

印尼語

Solr 包含對印尼語 (Bahasa Indonesia) 詞幹分析的支援,它遵循 此演算法 (PDF),而 Lucene 則包含範例的停用詞列表。

工廠類別: solr.IndonesianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: "sebagai sebagainya"

分詞器到過濾器: "sebagai", "sebagainya"

輸出: "bagai", "bagai"

義大利語

Solr 包含兩種義大利語詞幹分析器:一種位於 solr.SnowballPorterFilterFactory language="Italian" 中,以及一種稱為 solr.ItalianLightStemFilterFactory 的輕量詞幹分析器。Lucene 包含範例的停用詞列表。

工廠類別: solr.ItalianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_it.txt"/>
  <filter name="italianLightStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_it.txt"/>
  <filter class="solr.ItalianLightStemFilterFactory"/>
</analyzer>

輸入: "propaga propagare propagamento"

分詞器到過濾器: "propaga", "propagare", "propagamento"

輸出: "propag", "propag", "propag"

愛爾蘭語

Solr 可以使用 Snowball Porter 詞幹分析器並以 language="Irish" 作為參數來分析愛爾蘭語的詞幹。Solr 包含 solr.IrishLowerCaseFilterFactory,它可以處理愛爾蘭語特定的結構。Solr 也包含一組用於愛爾蘭語的縮寫,可以使用 solr.ElisionFilterFactory 移除這些縮寫。

工廠類別: solr.SnowballPorterFilterFactory

引數

language

必要

預設值:無

此範例中,詞幹分析器的語言為 Irish

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: "siopadóireacht síceapatacha b’fhearr m’athair"

分詞器到過濾器: "siopadóireacht", "síceapatacha", "b’fhearr", "m’athair"

輸出: "siopadóir", "síceapaite", "fearr", "athair"

日語

Solr 包含透過 Lucene Kuromoji 形態分析器分析日語的支援,其中包含數個分析元件 - 下方有更多關於每個元件的詳細資訊

以下這些來自 lucene-analyzers-common 的項目對於日語分析也很有用

  • CJKWidthFilter 會將全形 ASCII 變體摺疊為對應的基本拉丁形式,並將半形片假名變體摺疊為對應的全形形式。

日語重複標記字元過濾器

將水平日語重複標記 (odoriji) 正規化為其展開形式。不支援垂直重複標記。

工廠類別: JapaneseIterationMarkCharFilterFactory

引數

normalizeKanji

可選

預設值:true

設定為 false 可不正規化漢字重複標記。

normalizeKana

可選

預設值:true

設定為 false 可不正規化假名重複標記。

日語分詞器

日語分詞器會使用形態分析,並使用詞性、基本形式 (又稱為詞元)、讀音和發音來註解每個詞。

JapaneseTokenizer 具有 search 模式 (預設),它會執行對搜尋有用的分段:會使用啟發式方法將複合詞彙分段為組成部分,同時也會將原始複合詞彙保留為同義詞。

工廠類別: solr.JapaneseTokenizerFactory

引數

mode

可選

預設值:無

使用 search 模式以取得對搜尋有用的名詞分解效果。search 模式會改善搜尋的分段,但會犧牲詞性準確度。mode 的有效值為

  • normal:預設分段

  • search:對搜尋有用的分段 (額外的複合詞分割)

  • extended:搜尋模式加上未知單字的一元語法 (實驗性)

    對於某些應用程式,最好將 search 模式用於索引,並將 normal 模式用於查詢,以提高精確度並防止複合詞的一部分被比對和醒目提示。

userDictionary

可選

預設值:無

使用者字典的檔案名稱,允許使用您自己的項目覆寫統計模型,以便進行分段、詞性標籤和讀音,而不需要指定權重。請參閱 lang/userdict_ja.txt 以取得範例使用者字典檔案。

userDictionaryEncoding

可選

預設:UTF-8

使用者字典編碼。

discardPunctuation

可選

預設值:true

設定為 false 可保留標點符號,設定為 true 可捨棄標點符號。

discardCompoundToken

可選

預設值:無

設定為 false 可使用 search 模式保留原始複合詞彙,設定為 true 可捨棄原始複合詞彙。

日語基本形式過濾器

使用對應的基本形式 (詞元) 取代原始詞彙的文字。(JapaneseTokenizer 會使用基本形式註解每個詞彙。)

工廠類別: JapaneseBaseFormFilterFactory

引數:

日語詞性停用過濾器

移除具有其中一個已設定詞性的詞彙。JapaneseTokenizer 會使用詞性來註解詞彙。

工廠類別 JapanesePartOfSpeechStopFilterFactory

引數

tags

可選

預設值:無

要移除詞彙的詞性列表的檔案名稱。請參閱 sample_techproducts_config 設定集中的 conf/lang/stoptags_ja.txt 以取得範例。

日語片假名詞幹過濾器

將以長音符號 (U+30FC) 結尾的常見片假名拼寫變體正規化,方法是移除長音符號。

應在此過濾器之前指定 solr.CJKWidthFilterFactory,以將半形片假名正規化為全形。

工廠類別: JapaneseKatakanaStemFilterFactory

引數

minimumLength

可選

預設:4

長度低於此值的詞彙將不會進行詞幹分析。值必須為 2 或更大。

CJK 寬度過濾器

將全形 ASCII 變體折疊為等效的基本拉丁形式,並將半形片假名變體折疊為等效的全形形式。

工廠類別: CJKWidthFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

韓語

韓語(nori)分析器將 Lucene 的 nori 分析模組整合到 Solr 中。它使用 mecab-ko-dic 字典來執行韓語文本的詞法分析。

該字典是使用 MeCab 建立的,並定義了一種適用於韓語的特徵格式。

Nori 還具有使用者字典功能,允許您使用自己的詞條來覆蓋統計模型,用於分詞、詞性標籤和讀音,而無需指定權重。

範例:

  • 具有名稱

  • 具有類別名稱 (舊版)

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

韓語分詞器

工廠類別solr.KoreanTokenizerFactory

SPI 名稱korean

引數:

userDictionary

可選

預設值:無

使用者提供的字典路徑,用於將自訂名詞或複合詞添加到預設字典中。

userDictionaryEncoding

可選

預設值:無

使用者字典的字元編碼。

decompoundMode

可選

預設值:discard

定義如何處理複合詞彙。選項包括

  • none:不對詞彙進行分解。

  • discard:詞彙會被分解,並捨棄原始形式。

  • mixed:詞彙會被分解,並保留原始形式。

outputUnknownUnigrams

可選

預設值:false

如果為 true,則會輸出未知單詞的單字組。

discardPunctuation

可選

預設值:true

如果為 true,則會捨棄標點符號。

韓語詞性停用篩選器

此篩選器會移除符合詞性標籤的詞彙。

工廠類別solr.KoreanPartOfSpeechStopFilterFactory

SPI 名稱koreanPartOfSpeechStop

參數:無。

韓語讀音形式篩選器

此篩選器會將詞彙文本替換為讀音屬性,即漢字的韓文轉錄。

工廠類別solr.KoreanReadingFormFilterFactory

SPI 名稱koreanReadingForm

參數:無。

希伯來語、寮語、緬甸語、高棉語

除了 UAX#29 斷字規則之外,Lucene 還支援希伯來語的雙引號和單引號字元使用,並使用 analysis-extras 模組中的 solr.ICUTokenizerFactory 將寮語、緬甸語和高棉語分段為音節。若要使用此分詞器,您必須啟用 analysis-extras 模組

如需更多資訊,請參閱 ICUTokenizer

拉脫維亞語

Solr 包含對拉脫維亞語詞幹提取的支援,而 Lucene 包含一個範例停用詞清單。

工廠類別: solr.LatvianStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: "tirgiem tirgus"

分詞器到篩選器: "tirgiem", "tirgus"

輸出: "tirg", "tirg"

挪威語

Solr 包含兩個用於詞幹提取挪威語的類別:NorwegianLightStemFilterFactoryNorwegianMinimalStemFilterFactory。Lucene 包含一個範例停用詞清單。

另一個選項是使用 Snowball Porter 詞幹提取器,並帶有 language="Norwegian" 的參數。

對於正規化,有一個 NorwegianNormalizationFilterFactory,它是 斯堪的納維亞正規化篩選器 的變體,但具有針對挪威語調整的折疊規則。

挪威語輕型詞幹提取器

NorwegianLightStemFilterFactory 需要對 -dom 和 -het 結尾進行「兩次傳遞」排序。這表示在第一次傳遞中,單字 "kristendom" 會詞幹提取為 "kristen",然後套用所有一般規則,因此會進一步詞幹提取為 "krist"。這樣做的效果是 "kristen"、"kristendom"、"kristendommen" 和 "kristendommens" 都會詞幹提取為 "krist"。

第二次傳遞是選取 -dom 和 -het 結尾。請考慮以下範例

一次傳遞 兩次傳遞

之前

之後

之前

之後

forlegen

forleg

forlegen

forleg

forlegenhet

forlegen

forlegenhet

forleg

forlegenheten

forlegen

forlegenheten

forleg

forlegenhetens

forlegen

forlegenhetens

forleg

firkantet

firkant

firkantet

firkant

firkantethet

firkantet

firkantethet

firkant

firkantetheten

firkantet

firkantetheten

firkant

工廠類別: solr.NorwegianLightStemFilterFactory

引數

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.StempelPolishStemFilterFactorysolr.MorfologikFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: ""studenta studenci"

分詞器到篩選器: "studenta", "studenci"

輸出: "student", "student"

如需有關 Stempel 詞幹提取器的更多資訊,請參閱 Lucene javadocs

請注意,小寫篩選器是在 Morfologik 詞幹提取器之後套用;這是因為波蘭語字典包含專有名詞,然後適當的詞彙大小寫對於解決歧義(或甚至查詢正確的詞形還原)可能很重要。

Morfologik 字典參數值是一個常數,指定要選擇哪個字典。字典資源必須命名為 path/to/language.dict,並且具有相關聯的 .info 元資料檔案。如需詳細資訊,請參閱 Morfologik 專案。如果未提供字典屬性,則預設會載入並使用波蘭語字典。

葡萄牙語

Solr 包含四個葡萄牙語詞幹提取器:一個在 solr.SnowballPorterFilterFactory 中,一個稱為 solr.PortugueseStemFilterFactory 的替代詞幹提取器,一個稱為 solr.PortugueseLightStemFilterFactory 的較輕詞幹提取器,以及一個稱為 solr.PortugueseMinimalStemFilterFactory 的更不積極的詞幹提取器。Lucene 包含一個範例停用詞清單。

工廠類別: solr.PortugueseStemFilterFactorysolr.PortugueseLightStemFilterFactorysolr.PortugueseMinimalStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

輸入: 「praia praias」

斷詞器至過濾器: 「praia」、「praias」

輸出: 「pra」、「pra」

羅馬尼亞語

Solr 可以使用 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

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="scandinavianNormalization"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ScandinavianNormalizationFilterFactory"/>
</analyzer>

輸入: "blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj"

分詞器到篩選器: "blåbærsyltetøj", "blåbärsyltetöj", "blaabaersyltetoej", "blabarsyltetoj"

輸出: "blåbærsyltetøj", "blåbærsyltetøj", "blåbærsyltetøj", "blabarsyltetoj"

斯堪的納維亞折疊篩選器

此篩選器會將斯堪的納維亞字元 åÅäæÄÆ → a 和 öÖøØ → o 折疊。它也會區分雙母音 aa、ae、ao、oe 和 oo 的使用,只留下第一個。

這是一種在語義上比 ScandinavianNormalizationFilter 更具破壞性的解決方案,但除了可以幫助比對 raksmorgas 和 räksmörgås。

工廠類別: solr.ScandinavianFoldingFilterFactory

引數:

範例

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

輸入: "blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj"

分詞器到篩選器: "blåbærsyltetøj", "blåbärsyltetöj", "blaabaersyltetoej", "blabarsyltetoj"

輸出: "blabarsyltetoj", "blabarsyltetoj", "blabarsyltetoj", "blabarsyltetoj"

塞爾維亞語

塞爾維亞語正規化過濾器

Solr 包含一個正規化塞爾維亞語西里爾字母和拉丁字母的過濾器。請注意,此過濾器僅適用於小寫輸入。

有關使用此過濾器的使用者提示和建議,請參閱 Solr Wiki 中的塞爾維亞語支援

工廠類別: solr.SerbianNormalizationFilterFactory

引數

髮型

可選

預設值:bald

選擇正規化的範圍。有效值為

  • bald:西里爾字母會先轉換為拉丁字母;然後,拉丁字母會移除其附加符號,但帶刪節線的拉丁小寫字母 D (U+0111) 除外,它會轉換為 “dj

  • regular:只會套用西里爾字母到拉丁字母的正規化,保留拉丁字母的附加符號

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

西班牙語

Solr 包含兩個西班牙語詞幹分析器:一個在 solr.SnowballPorterFilterFactory language="Spanish" 中,以及一個名為 solr.SpanishLightStemFilterFactory 的較輕型詞幹分析器。Lucene 包含一個範例停用詞列表。

工廠類別: solr.SpanishStemFilterFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="spanishLightStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SpanishLightStemFilterFactory"/>
</analyzer>

輸入: "torear toreara torearlo"

分詞器到過濾器: "torear", "toreara", "torearlo"

輸出: "tor", "tor", "tor"

瑞典語

瑞典語詞幹過濾器

Solr 包含三個瑞典語詞幹分析器:一個在 solr.SnowballPorterFilterFactory language="Swedish" 中,一個名為 solr.SwedishLightStemFilterFactory 的較輕型詞幹分析器,以及一個最小詞幹分析器 solr.SwedishMinimalStemFilterFactory

Light 變體基於簡單規則,會移除像 -het-heten-else-elser 等字尾,而 Minimal 變體只會嘗試正規化單數/複數結尾,例如 -er-ar-arne 等。有關更多資訊,請參閱Lucene javadocs

已知瑞典語 Light 和 Minimal 詞幹分析器會產生許多衝突的詞幹,嚴重損害搜尋精確度。可能需要提供廣泛的自訂詞幹分析器對應列表來抵消此問題,例如使用StemmerOverrideFilter

Lucene 包含一個範例停用詞列表。

工廠類別: solr.SwedishStemFilterFactorysolr.SwedishLightStemFilterFactorysolr.SwedishMinimalStemFilterFactory

引數:

範例 (SwedishLightStemFilterFactory)

  • 具有名稱

  • 具有類別名稱 (舊版)

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="swedishLightStem"/>
</analyzer>
<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SwedishLightStemFilterFactory"/>
</analyzer>

輸入: "kloke klokhet klokheten"

分詞器到過濾器: "kloke", "klokhet", "klokheten"

輸出: "klok", "klok", "klok"

泰語

此過濾器會將泰文字符序列轉換為個別的泰語單字。與歐洲語言不同,泰語不使用空格來分隔單字。

工廠類別: solr.ThaiTokenizerFactory

引數:

範例

  • 具有名稱

  • 具有類別名稱 (舊版)

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

土耳其語

Solr 包含使用 solr.SnowballPorterFilterFactory 來支援土耳其語詞幹分析;使用 solr.TurkishLowerCaseFilterFactory 來支援不區分大小寫的搜尋;使用 solr.ApostropheFilterFactory 來支援剝離撇號和後續字尾(請參閱撇號在土耳其語資訊檢索中的作用);透過 solr.TruncateTokenFilterFactory 支援在可設定的最大長度處截斷 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