篩選器
篩選器會檢查符記串流,並根據所使用的篩選器類型,保留、轉換或捨棄符記。
關於篩選器
如同斷詞器,篩選器會取用輸入並產生符記串流。篩選器也衍生自 org.apache.lucene.analysis.TokenStream
,但與斷詞器不同的是,篩選器的輸入是另一個 TokenStream。篩選器的工作通常比斷詞器簡單,因為在大多數情況下,篩選器會依序查看串流中的每個符記,並決定是否要傳遞、取代或捨棄它。
篩選器也可以透過向前查看,一次考慮多個符記來進行更複雜的分析,儘管這比較不常見。此類篩選器的一種假設用途可能是正規化將被斷詞為兩個字的州名。例如,單一符記「california」將被取代為「CA」,而符記對「rhode」後接「island」將變成單一符記「RI」。
由於篩選器會取用一個 TokenStream
並產生新的 TokenStream
,因此它們可以無限期地一個接著一個鏈結。鏈中的每個篩選器會依次處理其前置篩選器產生的符記。因此,您指定篩選器的順序很重要。通常,最一般的篩選會先完成,後續的篩選階段會更專業化。
篩選器設定
篩選器是在綱要檔中使用 <filter>
元素作為 <analyzer>
的子元素來設定的,接在 <tokenizer>
元素之後。
例如
-
使用名稱
-
使用類別名稱(舊版)
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="englishPorter"/>
</analyzer>
</fieldType>
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
此範例從 Solr 的標準斷詞器開始,它會將欄位的文字斷詞為符記。然後,所有符記都會設定為小寫,這有助於在查詢時進行不區分大小寫的比對。
上述範例中的最後一個篩選器是詞幹分析器篩選器,它使用 Porter 詞幹分析演算法。
詞幹分析
詞幹分析器基本上是一組對應規則,可將一個字的各種形式對應回其衍生而來的基本字或詞幹字。
舉例來說,在英文中,「hugs」、「hugging」和「hugged」這些詞都是詞幹「hug」的不同形式。詞幹分析器會將所有這些詞彙替換為「hug」,而這將會被索引。這表示查詢「hug」會比對到「hugged」這個詞,但不會比對到「huge」。
反之,對您的查詢詞彙應用詞幹分析器,將允許包含未經詞幹分析處理的詞彙(如「hugging」)的查詢,比對到具有相同詞幹的不同變體(如「hugged」)的文件。這之所以可行,是因為索引器和查詢都會對應到相同的詞幹(「hug」)。
顯然,詞幹分析是非常特定於語言的。Solr 包含了由 Snowball 生成器建立的多個特定語言的詞幹分析器,這些分析器基於 Porter 詞幹分析演算法。通用的 Snowball Porter 詞幹分析器篩選器可以用於配置任何這些語言的詞幹分析器。Solr 還包含了一個方便的包裝器,用於英文 Snowball 詞幹分析器。此外,還有一些針對非英語語言的專用詞幹分析器。這些詞幹分析器在語言分析中有說明。
帶有參數的篩選器
可以將參數傳遞給分詞器工廠,以透過在 <filter>
元素上設定屬性來修改其行為。例如:
-
使用名稱
-
使用類別名稱(舊版)
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer name="pattern" pattern="; " />
<filter name="length" min="2" max="7"/>
</analyzer>
</fieldType>
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="; " />
<filter class="solr.LengthFilterFactory" min="2" max="7"/>
</analyzer>
</fieldType>
以下章節說明了此 Solr 版本中包含的篩選器工廠。
ASCII 折疊篩選器
此篩選器將不在基本拉丁 Unicode 區塊(前 127 個 ASCII 字元)中的字母、數字和符號 Unicode 字元轉換為其 ASCII 等效字元(如果存在)。此篩選器會轉換來自以下 Unicode 區塊的字元:
工廠類別:solr.ASCIIFoldingFilterFactory
參數
preserveOriginal
-
選填
預設值:
false
如果為
true
,則保留原始詞彙:「thé」→「the」、「thé」
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="asciiFolding" preserveOriginal="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizer"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false" />
</analyzer>
輸入:「á」(Unicode 字元 00E1)
輸出:「a」(ASCII 字元 97)
Beider-Morse 篩選器
實作 Beider-Morse 語音比對 (BMPM) 演算法,該演算法允許識別相似的名稱,即使它們的拼寫不同或使用不同的語言。有關其工作原理的詳細資訊,請參閱 Beider-Morse 語音比對一節。
BeiderMorseFilter 在 Solr 5.0 中變更了其行為,因為 BMPM 演算法更新為 3.04 版。較舊版本的 Solr 實作了 BMPM 3.00 版(請參閱 http://stevemorse.org/phoneticinfo.htm)。使用此篩選器和較早版本 Solr 建立的任何索引都需要重建。 |
工廠類別:solr.BeiderMorseFilterFactory
參數
nameType
-
選填
預設值:
GENERIC
名稱類型。有效值為
GENERIC
、ASHKENAZI
或SEPHARDIC
。如果未處理 Ashkenazi 或 Sephardic 名稱,請使用GENERIC
。 ruleType
-
選填
預設值:
APPROX
要套用的規則類型。有效值為
APPROX
或EXACT
。 concat
-
選填
預設值:
true
定義是否應使用管道符號 (
|
) 合併多個可能的比對結果。 languageSet
-
選填
預設值:
auto
要使用的語言集。值
auto
將允許篩選器識別語言,或者可以提供逗號分隔的清單。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="beiderMorse" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.BeiderMorseFilterFactory" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
Classic 篩選器
此篩選器採用 Classic 分詞器的輸出,並從首字母縮略詞中移除句點,並從所有格中移除「's」。
工廠類別:solr.ClassicFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="classic"/>
<filter name="classic"/>
</analyzer>
<analyzer>
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.ClassicFilterFactory"/>
</analyzer>
輸入:「I.B.M. cat’s can’t」
分詞器到篩選器:「I.B.M」、「cat’s」、「can’t」
輸出:「IBM」、「cat」、「can’t」
Common Grams 篩選器
此篩選器用於 index
時間分析,透過將常用詞彙(例如停用詞)與正規詞彙組合來建立詞語組。這可能會產生具有更多獨特詞彙的索引,但對於建立包含常用詞彙(例如「the cat」)的片語查詢很有用,這樣通常會比不使用組合詞彙快得多,因為只需考量在序列中包含兩個詞彙的文件之詞彙位置即可。正確的使用方式要求在 query
分析期間與 Common Grams 查詢篩選器配對。
這些篩選器也可以與 Stop 篩選器組合,因此搜尋 "the cat"
會比對不同的文件,然後是 "a cat"
,而對 "the"
或 "a"
的病態搜尋不會比對到任何文件。
工廠類別:solr.CommonGramsFilterFactory
參數
words
-
必要
預設值:無
常用詞檔案的名稱,其為 .txt 格式,例如
stopwords.txt
。 format
-
選填
預設值:無
如果停用詞清單已為 Snowball 設定格式,您可以指定
format="snowball"
,以便 Solr 可以讀取停用詞檔案。 ignoreCase
-
選填
預設值:
false
如果為
true
,則篩選器會在將詞彙與常用詞檔案比較時忽略大小寫。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="commonGrams" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="commonGramsQuery" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
輸入:「the cat in the hat」
分詞器到篩選器:「the」、「cat」、「in」、「the」、「hat」
(索引)輸出:「the」(1)、「the_cat」(1)、「cat」(2)、「cat_in」(2)、「in」(3)、「in_the」(3)、「the」(4)、「the_hat」(4)、「hat」(5)
(查詢)輸出:「the_cat」(1)、「cat_in」(2)、「in_the」(3)、「the_hat」(4)
Common Grams 查詢篩選器
此篩選器用於 Common Grams 篩選器的 query
時間分析方面 — 請參閱該篩選器以瞭解參數、範例設定和範例輸入/輸出描述。
排序規則金鑰篩選器
排序規則允許以語言相關的方式對文字進行排序。它通常用於排序,但也可用於進階搜尋。我們在 Unicode 排序規則一節中更詳細地介紹了這一點。
Daitch-Mokotoff Soundex 篩選器
實作 Daitch-Mokotoff Soundex 演算法,該演算法允許識別相似的名稱,即使它們的拼寫不同。有關其工作原理的詳細資訊,請參閱 語音比對一節。
工廠類別:solr.DaitchMokotoffSoundexFilterFactory
參數
inject
-
選填
預設值:
true
如果為
true
,則新的語音詞彙會新增至串流。否則,詞彙會被語音等效詞彙取代。將此設定為false
會啟用語音比對,但目標詞彙的確切拼寫可能不符。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="daitchMokotoffSoundex" inject="true"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DaitchMokotoffSoundexFilterFactory" inject="true"/>
</analyzer>
Double Metaphone 篩選器
此篩選器使用來自 commons-codec 的 DoubleMetaphone
編碼演算法建立詞彙。如需更多資訊,請參閱 語音比對。
工廠類別:solr.DoubleMetaphoneFilterFactory
參數
inject
-
選填
預設值:
true
如果為
true
,則新的語音詞彙會新增至串流。否則,詞彙會被語音等效詞彙取代。將此設定為false
會啟用語音比對,但目標詞彙的確切拼寫可能不符。 maxCodeLength
-
選填
預設值:無
要產生的程式碼最大長度。
範例
inject 的預設行為 (true
):保留原始詞彙並在相同位置新增語音詞彙。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DoubleMetaphoneFilterFactory"/>
</analyzer>
輸入:「four score and Kuczewski」
分詞器到篩選器:「four」(1)、「score」(2)、「and」(3)、「Kuczewski」(4)
輸出:「four」(1)、「FR」(1)、「score」(2)、「SKR」(2)、「and」(3)、「ANT」(3)、「Kuczewski」(4)、「KSSK」(4)、「KXFS」(4)
語音詞彙的位置增量為 0,表示它們與其來源的詞彙處於相同的位置(緊接在前面)。請注意,「Kuczewski」有兩種編碼,它們在相同位置新增。
範例
捨棄原始詞彙 (inject="false"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone" inject="false"/>
</analyzer>
輸入:「four score and Kuczewski」
分詞器到篩選器:「four」(1)、「score」(2)、「and」(3)、「Kuczewski」(4)
輸出:「FR」(1)、「SKR」(2)、「ANT」(3)、「KSSK」(4)、「KXFS」(4)
請注意,「Kuczewski」有兩種編碼,它們在相同位置新增。
分隔符號提升篩選器
此篩選器會將數值浮點提升值新增至詞彙,並以分隔符號字元分割。
工廠類別:solr.DelimitedBoostTokenFilterFactory
參數
delimiter
-
選填
預設值:
|
(管道符號)用於分隔詞彙和提升的值的字元。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DelimitedBoostTokenFilterFactory"/>
</analyzer>
輸入:「leopard|0.5 panthera uncia|0.9」
分詞器到篩選器:「leopard|0.5」(1)、「panthera」(2)、「uncia|0.9」(3)
輸出:「leopard」(1)[0.5]、「panthera」(2)、「uncia」(3)[0.9]
方括號中的數值浮點值是浮點詞彙提升屬性。
範例
使用不同的分隔符號 (delimiter="/"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost" delimiter="/"/>
</analyzer>
輸入:「leopard/0.5 panthera uncia/0.9」
分詞器到篩選器:「leopard/0.5」(1)、「panthera」(2)、「uncia/0.9」(3)
輸出:「leopard」(1)[0.5]、「panthera」(2)、「uncia」(3)[0.9]
注意:請確保分隔符號與您使用的分詞器相容
邊緣 N-gram 篩選器
此篩選器會產生給定範圍內大小的邊緣 N-gram 詞彙。
工廠類別:solr.EdgeNGramFilterFactory
參數
minGramSize
-
必要
預設值:無
最小的 gram 大小,必須 > 0。
maxGramSize
-
必要
預設值:無
最大的 gram 大小,必須 >=
minGramSize
。 preserveOriginal
-
選填
預設值:
false
如果為
true
,即使原始詞彙的長度小於minGramSize
或大於maxGramSize
,也會保留原始詞彙。
範例
預設行為。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="1"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="1"/>
</analyzer>
輸入: "four score and twenty"
斷詞器篩選: "four", "score", "and", "twenty"
輸出: "f", "s", "a", "t"
範例
範圍從 1 到 4。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "f", "fo", "fou", "four", "s", "sc", "sco", "scor"
範例
範圍從 4 到 6。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="4" maxGramSize="6"/>
</analyzer>
輸入: "four score and twenty"
斷詞器篩選: "four", "score", "and", "twenty"
輸出: "four", "scor", "score", "twen", "twent", "twenty"
範例
保留原始詞彙。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "fo", "fou", "four", "sc, "sco", "score"
英文最小詞幹篩選器
此篩選器會將英文複數詞彙詞幹化為單數形式。
工廠類別: solr.EnglishMinimalStemFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="englishMinimalStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
輸入: "dogs cats"
斷詞器篩選: "dogs", "cats"
輸出: "dog", "cat"
英文所有格篩選器
此篩選器會從詞彙中移除單數所有格(尾隨的 's)。請注意,複數所有格,例如 "divers' snorkels" 中的 s',不會由此篩選器移除。
工廠類別: solr.EnglishPossessiveFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="englishPossessive"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
輸入: "Man’s dog bites dogs' man"
斷詞器篩選: "Man’s", "dog", "bites", "dogs'", "man"
輸出: "Man", "dog", "bites", "dogs'", "man"
指紋篩選器
此篩選器會輸出單一符記,該符記是輸入符記的排序和去重集合的串聯。這對於叢集/連結用例很有用。
工廠類別: solr.FingerprintFilterFactory
參數
分隔符號
-
選填
預設值:空格字元
用於分隔合併到單一輸出符記中的符記的字元。
maxOutputTokenSize
-
選填
預設值:
1024
摘要輸出符記的最大長度。如果超出,則不會發出輸出符記。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="fingerprint" separator="_" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.FingerprintFilterFactory" separator="_" />
</analyzer>
輸入: "the quick brown fox jumped over the lazy dog"
斷詞器篩選: "the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"
輸出: "brown_dog_fox_jumped_lazy_over_quick_the"
扁平化圖形篩選器
此篩選器必須包含在索引時分析器規範中,該規範包含至少一個圖形感知篩選器,包括同義詞圖形篩選器和詞彙分隔符號圖形篩選器。
工廠類別: solr.FlattenGraphFilterFactory
參數:無
請參閱下方 同義詞圖形篩選器 和 詞彙分隔符號圖形篩選器 的範例。
Hunspell 詞幹篩選器
Hunspell 詞幹篩選器
提供多種語言的支援。您必須為想要與 Hunspell 詞幹篩選器搭配使用的每種語言提供字典 (.dic
) 和規則 (.aff
) 檔案。您可以在這裡下載這些語言檔案。
請注意,您的結果會因提供的字典和規則檔案的品質而有很大差異。例如,某些語言只有最少的詞彙表,沒有詞態資訊。另一方面,對於沒有詞幹器但有廣泛字典檔案的語言,Hunspell 詞幹器可能是不錯的選擇。
工廠類別: solr.HunspellStemFilterFactory
參數
dictionary
-
必要
預設值:無
字典檔案的路徑。
affix
-
必要
預設值:無
規則檔案的路徑。
ignoreCase
-
選填
預設值:
false
控制比對是否區分大小寫。
longestOnly
-
選填
預設值:
false
如果為
true
,則只發出最長的詞彙。 strictAffixParsing
-
選填
預設值:
true
控制詞綴剖析是否嚴格。如果為
true
,則在讀取詞綴規則時發生錯誤會導致 ParseException,否則會被忽略。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hunspellStem"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HunspellStemFilterFactory"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
輸入: "jump jumping jumped"
斷詞器篩選: "jump", "jumping", "jumped"
輸出: "jump", "jump", "jump"
連字符號詞彙篩選器
此篩選器會重建以連字符號連接的詞彙,這些詞彙由於欄位測試中的換行或其他插入的空白而被斷詞為兩個符記。如果符記以連字符號結尾,則會將其與後面的符記合併,並捨棄連字符號。
請注意,為了使此篩選器正常運作,上游斷詞器不得移除尾隨的連字符號字元。此篩選器通常僅在索引時有用。
工廠類別: solr.HyphenatedWordsFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hyphenatedWords"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
</analyzer>
輸入: "A hyphen- ated word"
斷詞器篩選: "A", "hyphen-", "ated", "word"
輸出: "A", "hyphenated", "word"
ICU 折疊篩選器
此篩選器是一種自訂的 Unicode 正規化形式,除了 ICU 正規化器 2 篩選器 中描述的 NFKC_Casefold
正規化形式外,還會套用 Unicode TR #30:字元折疊 中指定的折疊。此篩選器是 ASCII 折疊篩選器、小寫篩選器 和 ICU 正規化器 2 篩選器 的組合行為的更好替代品。
若要使用此篩選器,您必須將其他 .jar 新增至 Solr 的類別路徑(如 安裝外掛程式 區段中所述)。請參閱 solr/modules/analysis-extras/README.md
以取得您需要新增哪些 jar 的指示。
工廠類別: solr.ICUFoldingFilterFactory
參數
filter
-
選填
預設值:無
可用於排除要處理的一組字元的 Unicode 集合篩選器。請參閱 UnicodeSet javadocs 以取得更多資訊。
沒有篩選器的範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
使用篩選器排除瑞典語/芬蘭語字元的範例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding" filter="[^åäöÅÄÖ]"/>
</analyzer>
如需此正規化形式的詳細資訊,請參閱 Unicode TR #30:字元折疊。
ICU 正規化器 2 篩選器
此篩選器會根據 Unicode 標準附錄 #15 中描述的五種 Unicode 正規化形式之一正規化文字
-
NFC:(
name="nfc" mode="compose"
) 正規化形式 C,標準分解 -
NFD:(
name="nfc" mode="decompose"
) 正規化形式 D,標準分解,後接標準組成 -
NFKC:(
name="nfkc" mode="compose"
) 正規化形式 KC,相容性分解 -
NFKD:(
name="nfkc" mode="decompose"
) 正規化形式 KD,相容性分解,後接標準組成 -
NFKC_Casefold:(
name="nfkc_cf" mode="compose"
) 正規化形式 KC,具有其他 Unicode 大小寫折疊。使用 ICU 正規化器 2 篩選器是 小寫篩選器 和 NFKC 正規化的效能更佳的替代品。
工廠類別: solr.ICUNormalizer2FilterFactory
參數
form
-
必要
預設值:
nfkc_cf
正規化形式的名稱。有效的選項為
nfc
、nfd
、nfkc
、nfkd
或nfkc_cf
。 mode
-
必要
預設值:
compose
Unicode 字元組成和分解的模式。有效的選項為:
compose
或decompose
。 filter
-
選填
預設值:無
可用於排除要處理的一組字元的 Unicode 集合篩選器。請參閱 UnicodeSet javadocs 以取得更多資訊。
具有 NFKC_Casefold 的範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUNormalizer2FilterFactory" form="nfkc_cf" mode="compose"/>
</analyzer>
使用篩選器排除瑞典語/芬蘭語字元的範例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose" filter="[^åäöÅÄÖ]"/>
</analyzer>
如需這些正規化形式的詳細資訊,請參閱 Unicode 正規化形式。
若要使用此篩選器,您必須將其他 .jar 新增至 Solr 的類別路徑(如 安裝外掛程式 區段中所述)。請參閱 solr/modules/analysis-extras/README.md
以取得您需要新增哪些 jar 的指示。
ICU 轉換篩選器
此篩選器會將 ICU 轉換套用至文字。此篩選器僅支援 ICU 系統轉換。不支援自訂規則集。
工廠類別: solr.ICUTransformFilterFactory
參數
id
-
必要
預設值:無
您想要使用此篩選器套用的 ICU 系統轉換的識別碼。如需完整的 ICU 系統轉換清單,請參閱 http://demo.icu-project.org/icu-bin/translit?TEMPLATE_FILE=data/translit_rule_main.html。
direction
-
選填
預設值:
forward
ICU 轉換的方向。有效的選項為
forward
和reverse
。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="icuTransform" id="Traditional-Simplified"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Traditional-Simplified"/>
</analyzer>
如需 ICU 轉換的詳細資訊,請參閱 http://userguide.icu-project.org/transforms/general。
若要使用此篩選器,您必須將其他 .jar 新增至 Solr 的類別路徑(如 安裝外掛程式 區段中所述)。請參閱 solr/modules/analysis-extras/README.md
以取得您需要新增哪些 jar 的指示。
保留詞彙篩選器
此篩選器會捨棄除給定詞彙表中列出的詞彙以外的所有符記。這是停用詞篩選器的相反。此篩選器對於為受限的一組詞彙建立專用索引很有用。
工廠類別: solr.KeepWordFilterFactory
參數
words
-
必要
預設值:無
包含保留詞彙清單的文字檔案的路徑,每行一個詞彙。會忽略空白行和以
\#
開頭的行。這可以是絕對路徑,或是 Solrconf
目錄中的簡單檔案名稱。 format
-
選填
預設值:無
如果保留詞彙清單已針對 Snowball 設定格式,您可以指定
format="snowball"
,以便 Solr 可以讀取保留詞彙檔案。 ignoreCase
-
選填
預設值:
false
如果為
true
,則會不區分大小寫地進行比較。如果此引數為 true,則會假設詞彙檔案僅包含小寫詞彙。
範例
其中 keepwords.txt
包含
happy funny silly
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
</analyzer>
輸入: "Happy, sad or funny"
斷詞器篩選: "Happy", "sad", "or", "funny"
輸出: "funny"
範例
相同的 keepwords.txt
,不區分大小寫
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt" ignoreCase="true"/>
</analyzer>
輸入: "Happy, sad or funny"
斷詞器篩選: "Happy", "sad", "or", "funny"
輸出: "Happy", "funny"
範例
在篩選保留詞彙之前使用 LowerCaseFilterFactory,沒有 ignoreCase
旗標。
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
輸入: "Happy, sad or funny"
斷詞器篩選: "Happy", "sad", "or", "funny"
篩選器到篩選器: "happy", "sad", "or", "funny"
輸出: "happy", "funny"
KStem 篩選器
對於正在尋找較不激進的詞幹器的開發人員而言,KStem 是 Porter 詞幹篩選器的替代方案。KStem 由 Bob Krovetz 編寫,由 Sergio Guzman-Lara (UMASS Amherst) 移植到 Lucene。此詞幹器僅適用於英文文字。
工廠類別: solr.KStemFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="kStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KStemFilterFactory"/>
</analyzer>
輸入: "jump jumping jumped"
斷詞器篩選: "jump", "jumping", "jumped"
輸出: "jump", "jump", "jump"
長度篩選器
此篩選器會傳遞長度落在指定最小/最大限制內的符記。所有其他符記都會被捨棄。
工廠類別: solr.LengthFilterFactory
參數
min
-
必要
預設值:無
最小符記長度。會捨棄短於此值的符記。
max
-
必要
預設值:無
最大符記長度。必須大於
min
。會捨棄長於此值的符記。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="length" min="3" max="7"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="7"/>
</analyzer>
輸入: "turn right at Albuquerque"
斷詞器篩選: "turn", "right", "at", "Albuquerque"
輸出: "turn", "right"
限制符記計數篩選器
此篩選器會限制接受的符記數量,通常適用於索引分析。
預設情況下,一旦達到限制,此篩選器會忽略包裝的 TokenStream
中的任何符記,這可能會導致在 incrementToken()
傳回 false
之前呼叫 reset()
。對於大多數 TokenStream
實作,這應該是可以接受的,並且比耗用完整串流更快。如果您要包裝需要耗用完整的符記串流才能正常運作的 TokenStream
,請使用 consumeAllTokens="true"
選項。
工廠類別: solr.LimitTokenCountFilterFactory
參數
maxTokenCount
-
必要
預設值:無
最大符記計數。達到此限制後,會捨棄符記。
consumeAllTokens
-
選填
預設值:
false
是否在達到最大符記計數後耗用(並捨棄)先前符記篩選器的符記。請參閱上方說明。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="limitTokenCount" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
輸入 "1 2 3 4 5 6 7 8 9 10 11 12"
斷詞器篩選 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
輸出 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
限制符記位移篩選器
此篩選器會將符記限制為在設定的最大起始字元位移之前的符記。例如,這對於限制醒目提示很有用。
預設情況下,一旦達到限制,此篩選器會忽略包裝的 TokenStream
中的任何符記,這可能會導致在 incrementToken()
傳回 false
之前呼叫 reset()
。對於大多數 TokenStream
實作,這應該是可以接受的,並且比耗用完整串流更快。如果您要包裝需要耗用完整的符記串流才能正常運作的 TokenStream
,請使用 consumeAllTokens="true"
選項。
工廠類別: solr.LimitTokenOffsetFilterFactory
參數
maxStartOffset
-
必要
預設值:無
最大符記起始字元位移。達到此限制後,會捨棄符記。
consumeAllTokens
-
選填
預設值:
false
是否在達到最大起始位移後耗用(並捨棄)先前符記篩選器的符記。請參閱上方說明。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenOffset" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenOffsetFilterFactory" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
輸入: "0 2 4 6 8 A C E"
斷詞器篩選: "0", "2", "4", "6", "8", "A", "C", "E"
輸出: "0", "2", "4", "6", "8", "A"
限制符記位置篩選器
此篩選器會將符記限制為在設定的最大符記位置之前的符記。
預設情況下,一旦達到限制,此篩選器會忽略包裝的 TokenStream
中的任何符記,這可能會導致在 incrementToken()
傳回 false
之前呼叫 reset()
。對於大多數 TokenStream
實作,這應該是可以接受的,並且比耗用完整串流更快。如果您要包裝需要耗用完整的符記串流才能正常運作的 TokenStream
,請使用 consumeAllTokens="true"
選項。
工廠類別: solr.LimitTokenPositionFilterFactory
參數
maxTokenPosition
-
必要
預設值:無
最大 Token 位置。達到此限制後,Token 將被丟棄。
consumeAllTokens
-
選填
預設值:
false
是否在達到最大起始位移後耗用(並捨棄)先前符記篩選器的符記。請參閱上方說明。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenPosition" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenPositionFilterFactory" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
輸入 "1 2 3 4 5"
斷詞器篩選 "1", "2", "3", "4", "5"
輸出 "1", "2", "3"
小寫篩選器
將 Token 中任何大寫字母轉換為等效的小寫 Token。所有其他字元保持不變。
工廠類別: solr.LowerCaseFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
輸入: "Down With CamelCase"
斷詞器至篩選器: "Down", "With", "CamelCase"
輸出: "down", "with", "camelcase"
受管理停用詞篩選器
這是停用詞篩選器工廠的特殊版本,它使用一組從 REST API 管理的停用詞。
參數
受管理
-
必要
預設值:無
應在受管理 REST API 中用於此組停用詞的名稱。
範例: 使用此設定,這組詞彙被命名為 "english",並且可以透過 /solr/collection_name/schema/analysis/stopwords/english
進行管理。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="managedStop" managed="english"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedStopFilterFactory" managed="english"/>
</analyzer>
有關輸入/輸出的範例,請參閱停用詞篩選器。
受管理同義詞篩選器
這是同義詞篩選器的特殊版本,它使用一個從 REST API 管理的同義詞映射。
受管理同義詞篩選器已過時
受管理同義詞篩選器已被棄用,取而代之的是受管理同義詞圖篩選器,該篩選器是多詞同義詞支援所必需的。 |
工廠類別: solr.ManagedSynonymFilterFactory
有關參數和範例,請參閱下方的同義詞圖篩選器。
受管理同義詞圖篩選器
這是同義詞圖篩選器的特殊版本,它使用一個從 REST API 管理的同義詞映射。
此篩選器映射單個或多個 Token 的同義詞,產生完全正確的圖形輸出。此篩選器是受管理同義詞篩選器的替代品,後者為多詞同義詞產生不正確的圖形。
雖然此篩選器產生正確的 Token 圖形,但它無法正確消耗輸入 Token 圖形。 |
參數
受管理
-
必要
預設值:無
應在受管理 REST API 中用於此同義詞映射的名稱。
範例: 使用此設定,這組映射被命名為 "english",並且可以透過 /solr/collection_name/schema/analysis/synonyms/english
進行管理。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
</analyzer>
有關輸入/輸出的範例,請參閱下方的同義詞圖篩選器。
MinHash 篩選器
從串流中的所有輸入 Token 產生可重複的隨機固定數量的雜湊 Token。為此,它首先消耗其來源的所有輸入 Token。此篩選器通常在Shingle 篩選器之前,如下面的範例所示。
每個輸入 Token 都會被雜湊。隨後,透過與一組預先計算的雜湊組合,將其「重新雜湊」hashCount
次。對於每個產生的雜湊,雜湊空間被分為 bucketCount
個儲存桶。為每個儲存桶產生最低的一組 hashSetSize
個雜湊(通常為一組)。
此篩選器為輸入 Token 產生一種簽名或草圖,可用於計算文件之間的 Jaccard 相似性。
參數
hashCount
-
選填
預設值:
1
要使用的雜湊數。
bucketCount
-
選填
預設值:
512
要使用的儲存桶數。
hashSetSize
-
選填
預設值:
1
每個儲存桶中最低雜湊集合的大小。
withRotation
-
選填
預設值:請參閱描述
如果雜湊儲存桶為空,則從第一個具有值的前一個儲存桶產生雜湊值。如果
bucketCount
大於1
,則預設值為true
,否則為false
。
產生的雜湊數取決於上述選項。對於 withRotation
的預設設定,產生的雜湊數為 hashCount
x bucketCount
x hashSetSize
⇒ 預設情況下為 512。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="icu"/>
<filter name="icuFolding"/>
<filter name="shingle" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter name="minHash" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
<analyzer>
<tokenizer class="solr.ICUTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter class="org.apache.lucene.analysis.minhash.MinHashFilterFactory" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
輸入: "woof woof woof woof woof"
斷詞器至篩選器: "woof woof woof woof woof"
輸出: "℁팽徭聙↝ꇁ홱杯", "℁팽徭聙↝ꇁ홱杯", "℁팽徭聙↝ꇁ홱杯", ...。總共 512 次
N-Gram 篩選器
產生指定範圍內大小的 n-gram Token。請注意,Token 按位置排序,然後按 gram 大小排序。
工廠類別: solr.NGramFilterFactory
參數
minGramSize
-
必要
預設值:無
最小的 gram 大小,必須 > 0。
maxGramSize
-
必要
預設值:無
最大的 gram 大小,必須 >=
minGramSize
。 preserveOriginal
-
選填
預設值:
false
如果為
true
,即使原始詞彙的長度小於minGramSize
或大於maxGramSize
,也會保留原始詞彙。
範例
預設行為。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="2"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="2"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "f", "o", "u", "r", "fo", "ou", "ur", "s", "c", "o", "r", "e", "sc", "co", "or", "re"
範例
範圍從 1 到 4。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "f", "fo", "fou", "four", "o", "ou", "our", "u", "ur", "r", "s", "sc", "sco", "scor", "c", "co", "cor", "core", "o", "or", "ore", "r", "re", "e"
範例
範圍為 3 到 5。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="3" maxGramSize="5"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "fou", "four", "our", "sco", "scor", "score", "cor", "core", "ore"
範例
保留原始詞彙。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
輸入: "four score"
斷詞器篩選: "four", "score"
輸出: "fo", "fou", "ou", "our", "ur", "four", "sc", "sco", "co", "cor", "or", "ore", "re", "score"
數值酬載 Token 篩選器
此篩選器將數值浮點酬載值新增至符合給定類型的 Token。有關 Token 類型和酬載的更多資訊,請參閱 org.apache.lucene.analysis.Token
類別的 Javadoc。
工廠類別: solr.NumericPayloadTokenFilterFactory
參數
payload
-
必要
預設值:無
將新增至所有相符 Token 的浮點值。
typeMatch
-
必要
預設值:無
Token 類型名稱字串。具有相符類型名稱的 Token 將其酬載設定為上述浮點值。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="numericPayload" payload="0.75" typeMatch="word"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.NumericPayloadTokenFilterFactory" payload="0.75" typeMatch="word"/>
</analyzer>
輸入: "bing bang boom"
斷詞器至篩選器: "bing", "bang", "boom"
輸出: "bing"[0.75], "bang"[0.75], "boom"[0.75]
模式取代篩選器
此篩選器將正規表示式套用至每個 Token,對於那些相符的 Token,將取代字串取代相符的模式。不相符的 Token 將保持不變傳遞。
工廠類別: solr.PatternReplaceFilterFactory
參數
pattern
-
必要
預設值:無
要根據
java.util.regex.Pattern
針對每個 Token 測試的正規表示式。 replacement
-
必要
預設值:無
取代相符模式的字串。此字串可能包含對正規表示式模式中擷取群組的參考。請參閱
java.util.regex.Matcher
的 Javadoc。 replace
-
選填
預設值:
all
表示是否應取代 Token 中模式的所有出現 (
all
),還是僅取代第一個出現 (first
)。
範例
簡單字串取代
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="cat" replacement="dog"/>
</analyzer>
輸入: "cat concatenate catycat"
斷詞器至篩選器: "cat", "concatenate", "catycat"
輸出: "dog", "condogenate", "dogydog"
範例
字串取代,僅第一個出現
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog" replace="first"/>
</analyzer>
輸入: "cat concatenate catycat"
斷詞器至篩選器: "cat", "concatenate", "catycat"
輸出: "dog", "condogenate", "dogycat"
範例
更複雜的模式,在取代中包含擷取群組參考。以非數字字元開頭且以數字結尾的 Token 將在數字前插入底線。否則,Token 將保持不變傳遞。
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="(\D+)(\d+)$" replacement="$1_$2"/>
</analyzer>
輸入: "cat foo1234 9987 blah1234foo"
斷詞器至篩選器: "cat", "foo1234", "9987", "blah1234foo"
輸出: "cat", "foo_1234", "9987", "blah1234foo"
語音篩選器
此篩選器使用 org.apache.commons.codec.language
套件中的其中一種語音編碼演算法建立 Token。有關更多資訊,請參閱語音匹配一節。
工廠類別: solr.PhoneticFilterFactory
參數
encoder
-
必要
預設值:無
要使用的編碼器名稱。編碼器名稱必須是下列之一(不區分大小寫)
inject
-
選填
預設值:
true
如果為
true
,則將新的語音 Token 新增至串流。否則,Token 將被語音對等物取代。將此設定為false
將啟用語音匹配,但目標字詞的確切拼寫可能不符。 maxCodeLength
-
選填
預設值:無
Metaphone 或 Double Metaphone 編碼器產生的程式碼最大長度。
範例
DoubleMetaphone 編碼的預設行為。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
</analyzer>
輸入: "four score and twenty"
斷詞器至篩選器: "four"(1), "score"(2), "and"(3), "twenty"(4)
輸出: "four"(1), "FR"(1), "score"(2), "SKR"(2), "and"(3), "ANT"(3), "twenty"(4), "TNT"(4)
語音 Token 的位置增量為 0,表示它們與它們衍生自的 Token 位於同一位置(緊接在前面)。
範例
捨棄原始 Token。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone" inject="false"/>
</analyzer>
輸入: "four score and twenty"
斷詞器至篩選器: "four"(1), "score"(2), "and"(3), "twenty"(4)
輸出: "FR"(1), "SKR"(2), "ANT"(3), "TWNT"(4)
範例
預設 Soundex 編碼器。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="Soundex"/>
</analyzer>
輸入: "four score and twenty"
斷詞器至篩選器: "four"(1), "score"(2), "and"(3), "twenty"(4)
輸出: "four"(1), "F600"(1), "score"(2), "S600"(2), "and"(3), "A530"(3), "twenty"(4), "T530"(4)
Porter 詞幹篩選器
此篩選器套用英文的 Porter 詞幹演算法。結果類似於使用帶有 language="English"
參數的 Snowball Porter 詞幹分析器。但是,此詞幹分析器直接以 Java 編碼,而不是基於 Snowball。它不接受受保護字詞的清單,僅適用於英文文本。但是,它的基準測試 速度快四倍 於英文 Snowball 詞幹分析器,因此可以提高效能。
工廠類別: solr.PorterStemFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="porterStem"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory "/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
輸入: "jump jumping jumped"
斷詞器篩選: "jump", "jumping", "jumped"
輸出: "jump", "jump", "jump"
受保護字詞篩選器
此篩選器啟用一種有條件篩選形式:它僅將其包裝的篩選器套用至未包含在受保護集合中的字詞。
工廠類別: solr.ProtectedTermFilterFactory
參數
protected
-
必要
預設值:無
包含受保護字詞的檔案的逗號分隔清單,每行一個字詞。
wrappedFilters
-
必要
預設值:無
不區分大小寫的逗號分隔
TokenFilterFactory
SPI 名稱清單(從工廠名稱中移除尾隨的(Token)FilterFactory
- 請參閱java.util.ServiceLoader interface
)。每個篩選器名稱都必須是唯一的,因此如果您需要多次指定相同的篩選器,則必須為每個相同 SPI 名稱的篩選器新增不區分大小寫的唯一-id
後綴(請注意,-id
後綴會在 SPI 查閱之前被移除)。 ignoreCase
-
選填
預設值:
false
測試受保護字詞時忽略大小寫。如果為
true
,則受保護清單應包含小寫字詞。
範例
除了 protectedTerms.txt
中的字詞外,所有字詞都將被截斷為 4 個字元並轉換為小寫
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ProtectedTermFilterFactory"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
範例
此範例包含多個具有唯一 -id
後綴的同名包裝篩選器。請注意,篩選器 SPI 名稱和 -id
後綴都將被視為不區分大小寫。
對於 protectedTerms.txt
中的字詞以外的所有字詞,都將新增同義詞、字詞將被反轉,然後為反轉字詞新增同義詞
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="SynonymGraph-fwd,ReverseString,SynonymGraph-rev"
synonymgraph-FWD.synonyms="fwd-syns.txt"
synonymgraph-REV.synonyms="rev-syns.txt"/>
</analyzer>
移除重複 Token 篩選器
此篩選器會移除串流中重複的 Token。僅當 Token 具有相同的文字和位置值時,才將其視為重複 Token。
由於位置必須相同,因此此篩選器可能無法按照使用者預期的名稱執行。它是一個非常特殊的篩選器,僅在非常特定的情況下有用。為了簡潔起見,它被這樣命名,即使它可能具有誤導性。
工廠類別: solr.RemoveDuplicatesTokenFilterFactory
參數:無
範例
RemoveDuplicatesTokenFilterFactory
有用的一個範例是在將同義詞檔案與詞幹分析器結合使用的情況下。在這些情況下,詞幹分析器和同義詞篩選器都可能導致位置完全相同且相同的字詞最終出現在串流中,從而增加索引大小而沒有任何好處。
請考慮 synonyms.txt
檔案中的以下項目
Television, Televisions, TV, TVs
當在以下設定中使用時
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="synonyms.txt"/>
<filter name="englishMinimalStem"/>
<filter name="removeDuplicates"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
輸入: "Watch TV"
斷詞器至同義詞篩選器: "Watch"(1) "TV"(2)
同義詞篩選器至詞幹篩選器: "Watch"(1) "Television"(2) "Televisions"(2) "TV"(2) "TVs"(2)
詞幹篩選器至移除重複項篩選器: "Watch"(1) "Television"(2) "Television"(2) "TV"(2) "TV"(2)
輸出: "Watch"(1) "Television"(2) "TV"(2)
反向萬用字元篩選器
這個篩選器會反轉詞彙,以提供更快的開頭萬用字元和前綴查詢。不含萬用字元的詞彙不會反轉。
工廠類別: solr.ReversedWildcardFilterFactory
參數
withOriginal
-
選填
預設值:
true
若為
true
,此篩選器會產生原始詞彙和反轉詞彙,且兩者位置相同。若為false
,則僅產生反轉詞彙。 maxPosAsterisk
-
選填
預設值:
2
觸發查詢詞彙反轉的星號萬用字元('*')的最大位置。星號位置高於此值的詞彙不會反轉。
maxPosQuestion
-
選填
預設值:
1
觸發查詢詞彙反轉的問號萬用字元('?')的最大位置。若要僅反轉純粹的後綴查詢(只有一個開頭星號的查詢),請將此值設為 0,並將
maxPosAsterisk
設為 1。 maxFractionAsterisk
-
選填
預設值:
0.0
另一個參數,若星號('*')的位置小於查詢詞彙長度的此分數,則觸發反轉。
minTrailing
-
選填
預設值:
2
查詢詞彙中,最後一個萬用字元後面的最小尾隨字元數。為了獲得良好效能,應將此值設定為大於
1
的值。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="reversedWildcard" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
輸入: "*foo *bar"
斷詞器到篩選器: "*foo", "*bar"
輸出: "oof*", "rab*"
Shingle 篩選器
此篩選器會從詞彙串流建構 shingles,也就是詞彙 n 元語法。它會將詞彙的執行合併為單一詞彙。
工廠類別: solr.ShingleFilterFactory
參數
minShingleSize
-
選填
預設值:
2
每個 shingle 的最小詞彙數。必須大於或等於
2
。 maxShingleSize
-
選填
預設值:
2
每個 shingle 的最大詞彙數。必須大於或等於
minShingleSize
。 outputUnigrams
-
選填
預設值:
true
若為
true
,則每個個別詞彙也會包含在原始位置。 outputUnigramsIfNoShingles
-
選填
預設值:
false
若為
true
,則在沒有 shingles 的情況下,會輸出個別詞彙。 tokenSeparator
-
選填
預設值:空格字元
將相鄰詞彙加入以形成 shingle 時要使用的字串。
fillerToken
-
選填
預設值:
_
(底線)用來填補已移除的停用詞的字元,以便保留位置增量。
範例
預設行為。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
輸入: "To be, or what?"
斷詞器到篩選器: "To"(1), "be"(2), "or"(3), "what"(4)
輸出: "To"(1), "To be"(1), "be"(2), "be or"(2), "or"(3), "or what"(3), "what"(4)
範例
shingle 大小為 4,不包含原始詞彙。
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle" maxShingleSize="4" outputUnigrams="false"/>
</analyzer>
輸入: "To be, or not to be."
斷詞器到篩選器: "To"(1), "be"(2), "or"(3), "not"(4), "to"(5), "be"(6)
輸出: "To be"(1), "To be or"(1), "To be or not"(1), "be or"(2), "be or not"(2), "be or not to"(2), "or not"(3), "or not to"(3), "or not to be"(3), "not to"(4), "not to be"(4), "to be"(5)
Snowball Porter 詞幹篩選器
此篩選器工廠會實例化由 Snowball 產生的語言特定詞幹分析器。Snowball 是一種軟體套件,可產生基於模式的詞幹分析器。此類型的詞幹分析器不如基於表格的詞幹分析器精確,但速度更快且複雜度較低。基於表格的詞幹分析器在建立和維護方面需要大量人力,因此通常是商業產品。
Solr 包含 Armenian、Basque、Catalan、Danish、Dutch、English、Finnish、French、German、Hungarian、Italian、Norwegian、Portuguese、Romanian、Russian、Spanish、Swedish 和 Turkish 的 Snowball 詞幹分析器。如需 Snowball 的詳細資訊,請造訪 http://snowball.tartarus.org/。
StopFilterFactory
、CommonGramsFilterFactory
和 CommonGramsQueryFilterFactory
可以選擇性地以 Snowball 格式讀取停用詞(在這些 FilterFactories 的設定中指定 format="snowball"
)。
工廠類別: solr.SnowballPorterFilterFactory
參數
language
-
選填
預設值:
English
用於選取要使用的適當 Porter 詞幹分析器的語言名稱。大小寫很重要。此字串用於在
org.tartarus.snowball.ext
類別階層中選取套件名稱。 protected
-
必要
預設值:
protected
包含受保護單字清單的文字檔路徑,每個單字一行。受保護的單字不會被詞幹化。會忽略空白行和以
\#
開頭的行。這可以是絕對路徑,或 Solrconf
目錄中的簡單檔案名稱。
範例
預設行為
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SnowballPorterFilterFactory"/>
</analyzer>
輸入: "flip flipped flipping"
斷詞器到篩選器: "flip", "flipped", "flipping"
輸出: "flip", "flip", "flip"
範例
法文詞幹分析器,英文單字
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="French"/>
</analyzer>
輸入: "flip flipped flipping"
斷詞器到篩選器: "flip", "flipped", "flipping"
輸出: "flip", "flipped", "flipping"
範例
西班牙文詞幹分析器,西班牙文單字
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="Spanish"/>
</analyzer>
輸入: "cante canta"
斷詞器到篩選器: "cante", "canta"
輸出: "cant", "cant"
停用詞篩選器
此篩選器會捨棄或停止分析停用詞清單上的詞彙。Solr conf
目錄中包含一個名為 stopwords.txt
的標準停用詞清單,適用於典型的英文文字。
工廠類別: solr.StopFilterFactory
參數
words
-
選填
預設值:無
包含停用詞清單的檔案路徑,每個停用詞一行。會忽略空白行和以
\#
開頭的行。這可以是絕對路徑,或相對於 Solrconf
目錄的路徑。 format
-
選填
預設值:無
如果停用詞清單已為 Snowball 設定格式,您可以指定
format="snowball"
,以便 Solr 可以讀取停用詞檔案。 ignoreCase
-
選填
預設值:
false
測試停用詞時忽略大小寫。若為
true
,停用詞清單應包含小寫單字。
範例
區分大小寫的相符項目,大寫單字不會停止。詞彙位置會略過已停止的單字。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
</analyzer>
輸入: "To be or what?"
斷詞器到篩選器: "To"(1), "be"(2), "or"(3), "what"(4)
輸出: "To"(1), "what"(4)
範例
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
輸入: "To be or what?"
斷詞器到篩選器: "To"(1), "be"(2), "or"(3), "what"(4)
輸出: "what"(4)
建議停用詞篩選器
如同停用詞篩選器,此篩選器會捨棄或停止分析停用詞清單上的詞彙。
建議停用詞篩選器與停用詞篩選器的不同之處在於,除非最後一個詞彙後面跟著詞彙分隔符號,否則它不會移除最後一個詞彙。例如,查詢 "find the"
會保留 'the'
,因為後面沒有空格、標點符號等,並將其標記為 KEYWORD
,以便後續篩選器不會變更或移除它。
相反地,像「find the popsicle」這樣的查詢會移除「the」作為停用詞,因為後面跟著一個空格。當使用其中一種分析建議程式時,您通常會在索引分析器中使用一般的 StopFilterFactory
,然後在查詢分析器中使用 SuggestStopFilter。
工廠類別: solr.SuggestStopFilterFactory
參數
words
-
選填
要剖析的停用詞檔案名稱。
format
-
選填
預設值:
wordset
定義將如何剖析單字檔案。如果未指定
words
,則不得指定format
。format
參數的有效值為-
wordset
:支援每行一個單字(包括任何單字內的空格),並允許以\#
字元開頭的整行註解。空白行會忽略。 -
snowball
:允許在每一行上指定多個單字,且可以使用垂直線 (|
) 指定尾隨註解。空白行會忽略。
-
ignoreCase
-
選填
預設值:
false
若為
true
,則相符項目不區分大小寫。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="lowercase"/>
<filter name="suggestStop" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SuggestStopFilterFactory" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
輸入: "The The"
斷詞器到篩選器: "the"(1), "the"(2)
輸出: "the"(2)
同義詞篩選器
此篩選器會執行同義詞對應。每個詞彙都會在同義詞清單中查閱,如果找到相符項目,則會發出同義詞來取代該詞彙。新詞彙的位置值設定為讓它們全部與原始詞彙的位置相同。
同義詞篩選器已過時
同義詞篩選器已過時,改用同義詞圖篩選器,而這項篩選器是多詞彙同義詞支援所必需的。 |
工廠類別: solr.SynonymFilterFactory
如需引數和範例,請參閱下方的同義詞圖篩選器。
同義詞圖篩選器
此篩選器會對應單一或多詞彙同義詞,產生完全正確的圖形輸出。此篩選器是同義詞篩選器的替代品,後者會為多詞彙同義詞產生不正確的圖形。
如果您在建立索引期間使用此篩選器,則必須在後面接上「扁平化圖形篩選器」,才能像同義詞篩選器一樣將詞彙疊在彼此之上,因為索引器無法直接使用圖形。若要讓同義詞取代項目是多個詞彙時,獲得完全正確的位置查詢,您應該改為在查詢時間使用此篩選器來套用同義詞。
雖然此篩選器產生正確的 Token 圖形,但它無法正確消耗輸入 Token 圖形。 |
工廠類別: solr.SynonymGraphFilterFactory
參數
synonyms
-
必要
預設值:無
包含同義詞清單的檔案路徑,每個同義詞一行。在(預設)
solr
格式中(替代方法請參閱下方的format
引數),空白行和以\#
開頭的行會忽略。這可以是逗號分隔的路徑清單。如需詳細資訊,請參閱資源載入。有兩種方法可以指定同義詞對應
-
以逗號分隔的單字清單。如果詞彙符合清單中的任何單字,則會取代清單中的所有單字,其中將包括原始詞彙。
-
兩個以逗號分隔的單字清單,它們之間有「=>」符號。如果詞彙符合左側的任何單字,則會取代右側的清單。除非原始詞彙也在右側的清單中,否則它不會被包含在內。
-
ignoreCase
-
選填
預設值:
false
若為
true
,同義詞會以不區分大小寫的方式比對。 expand
-
選填
預設值:
true
若為
true
,同義詞會展開為所有等效同義詞。若為false
,所有等效同義詞會縮減為清單中的第一個。 format
-
選填
預設值:
solr
控制如何剖析同義詞。支援簡短名稱
solr
(適用於SolrSynonymParser
)和wordnet
(適用於WordnetSynonymParser
)。您也可以提供您自己的SynonymMap.Builder
子類別名稱。 tokenizerFactory
-
選填
預設值:
WhitespaceTokenizerFactory
剖析同義詞檔案時要使用的斷詞器工廠名稱。具有名稱前綴
tokenizerFactory.*
的引數將會以 init 參數的形式提供給指定的斷詞器工廠。未被同義詞篩選器工廠使用的任何引數,包括那些沒有
tokenizerFactory.*
前綴的引數,也將以 init 參數的形式提供給斷詞器工廠。如果指定了
tokenizerFactory
,則不得指定analyzer
,反之亦然。 analyzer
-
選填
預設值:
WhitespaceTokenizerFactory
剖析同義詞檔案時要使用的分析器類別名稱。如果指定了
analyzer
,則不得指定tokenizerFactory
,反之亦然。
針對下列範例,假設有一個名為 mysynonyms.txt
的同義詞檔案
couch,sofa,divan
teh => the
huge,ginormous,humungous => large
small => tiny,teeny,weeny
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
</analyzer>
輸入: "teh small couch"
斷詞器到篩選器: "teh"(1), "small"(2), "couch"(3)
輸出: "the"(1), "tiny"(2), "teeny"(2), "weeny"(2), "couch"(3), "sofa"(3), "divan"(3)
範例
輸入: "teh ginormous, humungous sofa"
詞語切割器至過濾器: "teh"(1), "ginormous"(2), "humungous"(3), "sofa"(4)
輸出: "the"(1), "large"(2), "large"(3), "couch"(4), "sofa"(4), "divan"(4)
加權同義詞
結合 DelimitedBoostFilter 和 Synonym Graph Filter,您可以在查詢時實現加權同義詞。欲了解更多資訊,請參考: https://sease.io/2020/03/introducing-weighted-synonyms-in-apache-lucene.html 在以下範例中,假設有一個名為 boostedSynonyms.txt
的同義詞檔案
leopard, big cat|0.8, bagheera|0.9, panthera pardus|0.85
lion => panthera leo|0.9, simba|0.8, kimba|0.75
範例
使用名稱
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="boostedSynonyms.txt"/>
<filter name="delimitedBoost"/>
</analyzer>
輸入: "lion"
詞語切割器至過濾器: "lion"(1)
輸出: "panthera"(1), "leo"(2)[0.9], "simba"(1)[0.8], "kimba"(1)[0.75]
詞語偏移酬載過濾器
這個過濾器會將詞語的數值字元偏移量作為該詞語的酬載值加入。
工廠類別: solr.TokenOffsetPayloadTokenFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="tokenOffsetPayload"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TokenOffsetPayloadTokenFilterFactory"/>
</analyzer>
輸入: "bing bang boom"
斷詞器至篩選器: "bing", "bang", "boom"
輸出: "bing"[0,4], "bang"[5,9], "boom"[10,14]
修剪過濾器
這個過濾器會修剪詞語開頭和/或結尾的空白字元。大多數詞語切割器會在空白字元處斷開詞語,因此這個過濾器最常用於特殊情況。
工廠類別: solr.TrimFilterFactory
參數:無
範例
這裡使用的 PatternTokenizerFactory 配置會以簡單的逗號分割輸入,它不會移除空白字元。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="pattern" pattern=","/>
<filter name="trim"/>
</analyzer>
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern=","/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
輸入: "one, two , three ,four "
詞語切割器至過濾器: "one", " two ", " three ", "four "
輸出: "one", "two", "three", "four"
類型即酬載過濾器
這個過濾器會將詞語的類型,以編碼的位元組序列形式,作為其酬載加入。
工廠類別: solr.TypeAsPayloadTokenFilterFactory
參數:無
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="whitespace"/>
<filter name="typeAsPayload"/>
</analyzer>
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TypeAsPayloadTokenFilterFactory"/>
</analyzer>
輸入: "Pay Bob’s I.O.U."
詞語切割器至過濾器: "Pay", "Bob’s", "I.O.U."
輸出: "Pay"[<ALPHANUM>], "Bob’s"[<APOSTROPHE>], "I.O.U."[<ACRONYM>]
類型即同義詞過濾器
這個過濾器會將詞語的類型,作為與詞語相同位置的詞語加入,還可以選擇在前面加上可配置的前綴。
工廠類別: solr.TypeAsSynonymFilterFactory
參數
prefix
-
選填
預設值:無
要加在詞語類型前面的前綴。
ignore
-
選填
預設值:無
一個以逗號分隔的類型列表,用於忽略且不轉換為同義詞。
synFlagsMask
-
選填
預設值:請參閱說明
一個遮罩(以整數形式提供),用於控制哪些旗標會傳播到同義詞。預設值為整數
-1
,即遮罩0xFFFFFFFF
- 這個遮罩會原樣傳播任何旗標。
範例
在以下範例中,每個詞語的類型都會以文字形式在相同位置發出
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="standard"/>
<filter name="typeAsSynonym"/>
</analyzer>
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory"/>
</analyzer>
在以下範例中,對於類型為 <URL>
的詞語 "example.com",在相同位置發出的詞語會是 "_type_<URL>"
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<tokenizer name="uax29URLEmail"/>
<filter name="typeAsSynonym" prefix="_type_"/>
</analyzer>
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory" prefix="_type_"/>
</analyzer>
類型詞語過濾器
這個過濾器會拒絕或允許指定的詞語類型列表,假設詞語具有與其相關聯的類型中繼資料。例如,UAX29 URL Email Tokenizer 會發出 "<URL>" 和 "<EMAIL>" 類型的詞語,以及其他類型。如果您希望,這個過濾器可以讓您只從文字中提取電子郵件地址作為詞語。
工廠類別: solr.TypeTokenFilterFactory
參數
types
-
必要
預設值:無
定義要過濾的類型檔案路徑。
useWhitelist
-
選填
預設值:
false
如果為
true
,則types
中定義的檔案應作為包含列表使用。如果為false
或未定義,則types
中定義的檔案會作為拒絕列表使用。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<filter name="typeToken" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
<analyzer>
<filter class="solr.TypeTokenFilterFactory" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
詞語分隔符號過濾器
這個過濾器會在詞語分隔符號處分割詞語。
詞語分隔符號過濾器已遭棄用
詞語分隔符號過濾器已遭棄用,改用詞語分隔符號圖形過濾器,此過濾器必須產生正確的詞語圖形,以便短語查詢等能夠正確運作。 |
工廠類別: solr.WordDelimiterFilterFactory
如需完整說明,包括引數和範例,請參閱下方的詞語分隔符號圖形過濾器。
詞語分隔符號圖形過濾器
這個過濾器會在詞語分隔符號處分割詞語。
如果您在建立索引期間使用此過濾器,您必須接著使用展平圖形過濾器,以像詞語分隔符號過濾器一樣將詞語壓在一起,因為索引器無法直接取用圖形。為了在分割詞語時獲得完全正確的位置查詢,您應該改在查詢時使用此過濾器。
請注意:雖然此過濾器會產生正確的詞語圖形,但它無法正確取用輸入詞語圖形。
判斷分隔符號的規則如下
-
單字內的大小寫變化:"CamelCase" → "Camel", "Case"。可以透過設定
splitOnCaseChange="0"
來停用此功能。 -
從字母轉換為數字字元或反之:"Gonzo5000" → "Gonzo", "5000" "4500XL" → "4500", "XL"。可以透過設定
splitOnNumerics="0"
來停用此功能。 -
非字母數字字元(捨棄):"hot-spot" → "hot", "spot"
-
尾隨的 "'s" 會被移除:"O’Reilly’s" → "O", "Reilly"
-
任何開頭或結尾的分隔符號都會被捨棄:"--hot-spot--" → "hot", "spot"
工廠類別: solr.WordDelimiterGraphFilterFactory
參數
generateWordParts
-
選填
預設值:
1
如果為非零值,則會在分隔符號處分割單字。例如:"CamelCase", "hot-spot" → "Camel", "Case", "hot", "spot"
generateNumberParts
-
選填
預設值:
1
如果為非零值,則會在分隔符號處分割數值字串:"1947-32" → *"1947", "32"
splitOnCaseChange
-
選填
預設值:
1
如果為
0
,則單字不會在大小寫變化處分割:"BugBlaster-XL" → "BugBlaster", "XL"。以下範例 1 說明了預設(非零)分割行為。 splitOnNumerics
-
選填
預設值:
1
如果為
0
,則不會在從字母轉換為數字時分割單字:"FemBot3000" → "Fem", "Bot3000" catenateWords
-
選填
預設值:
0
如果為非零值,則會合併單字部分的最大執行次數:"hot-spot-sensor’s" → "hotspotsensor"
catenateNumbers
-
選填
預設值:
0
如果為非零值,則會合併數字部分的最大執行次數:1947-32" → "194732"
catenateAll
-
選填
預設值:
0
如果為非零值,則會合併單字和數字部分的執行次數:"Zap-Master-9000" → "ZapMaster9000"
preserveOriginal
-
選填
預設值:
0
如果為非零值,則會保留原始詞語:"Zap-Master-9000" → "Zap-Master-9000", "Zap", "Master", "9000"
protected
-
選填
預設值:無
包含應直接傳遞而無需分割的受保護單字清單的檔案路徑。
stemEnglishPossessive
-
選填
預設值:
1
如果為
1
,則會從每個子詞語中移除所有格's
。 adjustOffsets
-
選填
預設值:
true
如果為
true
,則會調整部分詞語的偏移量。 types
-
選填
預設值:無
包含 字元 => 類型 對應的檔案路徑,可自訂此過濾器的分割行為。可辨識的字元類型:
LOWER
、UPPER
、ALPHA
、DIGIT
、ALPHANUM
和SUBWORD_DELIM
。對於沒有自訂對應的任何字元,預設行為是從 Unicode 字元屬性計算得來。會忽略以 '#' 開頭的空白行和註解行。範例檔案
# Don't split numbers at '$', '.' or ',' $ => DIGIT . => DIGIT \u002C => DIGIT # Don't split on ZWJ: https://en.wikipedia.org/wiki/Zero-width_joiner \u200D => ALPHANUM
範例
預設行為。這裡使用空白字元切割器來保留非字母數字字元。
-
使用名稱
-
使用類別名稱(舊版)
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
</analyzer>
輸入: "hot-spot RoboBlaster/9000 100XL"
詞語切割器至過濾器: "hot-spot", "RoboBlaster/9000", "100XL"
輸出: "hot", "spot", "Robo", "Blaster", "9000", "100", "XL"
範例
不要在大小寫變化處分割,也不要產生數字部分。請注意,由於不產生數字部分,因此最終會捨棄僅包含數字部分的詞語。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" generateNumberParts="0" splitOnCaseChange="0"/>
</analyzer>
輸入: "hot-spot RoboBlaster/9000 100-42"
詞語切割器至過濾器: "hot-spot", "RoboBlaster/9000", "100-42"
輸出: "hot", "spot", "RoboBlaster", "9000"
範例
合併單字部分和數字部分,但不會合併在同一個詞語中出現的單字和數字部分。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateWords="1" catenateNumbers="1"/>
</analyzer>
輸入: "hot-spot 100+42 XL40"
詞語切割器至過濾器: "hot-spot"(1), "100+42"(2), "XL40"(3)
輸出: "hot"(1), "spot"(2), "hotspot"(2), "100"(3), "42"(4), "10042"(4), "XL"(5), "40"(6)
範例
合併全部。單字和/或數字部分會合併在一起。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateAll="1"/>
</analyzer>
輸入: "XL-4000/ES"
詞語切割器至過濾器: "XL-4000/ES"(1)
輸出: "XL"(1), "4000"(2), "ES"(3), "XL4000ES"(3)
範例
使用包含 "AstroBlaster" 和 "XL-5000" (及其他)的受保護單字清單。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" protected="protwords.txt"/>
</analyzer>
輸入: "FooBar AstroBlaster XL-5000 ==ES-34-"
詞語切割器至過濾器: "FooBar", "AstroBlaster", "XL-5000", "==ES-34-"
輸出: "FooBar", "FooBar", "AstroBlaster", "XL-5000", "ES", "34"