CharFilters
CharFilter 是一個預先處理輸入字元的元件。
CharFilter 可以像 Token Filter 一樣串聯,並放在斷詞器前面。CharFilter 可以新增、變更或移除字元,同時保留原始字元偏移,以支援醒目顯示等功能。
solr.MappingCharFilterFactory
這個篩選器會建立 org.apache.lucene.analysis.MappingCharFilter
,可用於將一個字串變更為另一個字串(例如,將 é
正規化為 e
)。
這個篩選器需要指定一個 mapping
引數,該引數是包含要執行之對應的檔案路徑和名稱。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<charFilter name="mapping" mapping="mapping-FoldToASCII.txt"/>
<tokenizer ...>
[...]
</analyzer>
<analyzer>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
<tokenizer ...>
[...]
</analyzer>
對應檔案語法
-
以井號 (
#
) 開頭的註解行以及空白行會被忽略。 -
每個非註解、非空白行都包含以下形式的對應:
"來源" => "目標"
-
雙引號括住的來源字串、選用空格、箭頭 (
=>
)、選用空格、雙引號括住的目標字串。
-
-
對應行不允許尾隨註解。
-
來源字串必須包含至少一個字元,但目標字串可以為空。
-
在來源和目標字串中會識別下列字元跳脫序列
跳脫序列 產生的字元(ECMA-48 別名) Unicode 字元 範例對應行 \\
\
U+005C
"\\" => "/"
\"
"
U+0022
"\"and\"" => "'and'"
\b
倒退鍵 (BS)
U+0008
"\b" => " "
\t
Tab 鍵 (HT)
U+0009
"\t" => ","
\n
換行 (LF)
U+000A
"\n" => "<br>"
\f
換頁 (FF)
U+000C
"\f" => "\n"
\r
歸位 (CR)
U+000D
"\r" => "/carriage-return/"
\uXXXX
4 個十六進位數字參照的 Unicode 字元
U+XXXX
"\uFEFF" => ""
-
反斜線後接任何其他字元會被視為該字元本身,反斜線會被忽略。
-
solr.HTMLStripCharFilterFactory
此過濾器會建立 org.apache.solr.analysis.HTMLStripCharFilter
。此 CharFilter 會從輸入串流中移除 HTML,並將結果傳遞給另一個 CharFilter 或 Tokenizer。
此過濾器
-
移除 HTML/XML 標籤,同時保留其他內容。
-
移除標籤內的屬性,並支援可選的屬性引號。
-
移除 XML 處理指令,例如:<?foo bar?>
-
移除 XML 註解。
-
移除以 <!> 開頭的 XML 元素。
-
移除 <script> 和 <style> 元素的內容。
-
處理這些元素內的 XML 註解(正常的註解處理並不總是有效)。
-
將數值字元實體參照(例如
A
; 或
;)替換為對應的字元。 -
如果實體參照位於輸入的末尾,則結尾的 ';' 是可選的;否則,結尾的 ';' 是強制性的,以避免在類似 "Alpha&Omega Corp" 的字串上產生錯誤比對。
-
將所有具名的字元實體參照替換為對應的字元。
-
 
; 會被替換為一個空格,而不是 0xa0 字元。 -
換行符會被替換為區塊級元素。
-
會識別 <CDATA> 區段。
-
內嵌標籤,例如
<b>
、<i>
或<span>
將被移除。 -
會識別並處理大寫字元實體,例如
quot
、gt
、lt
和amp
,視為小寫。
輸入不一定是 HTML 文件。此過濾器僅移除看起來像 HTML 的結構。如果輸入不包含任何看起來像 HTML 的內容,則此過濾器不會移除任何輸入。 |
下表提供 HTML 移除的範例。
輸入 | 輸出 |
---|---|
|
my link |
|
hello |
|
hello |
|
if a<b then print a; |
|
hello |
|
a<b A Alpha&Omega Ω |
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<charFilter name="htmlStrip"/>
<tokenizer ...>
[...]
</analyzer>
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer ...>
[...]
</analyzer>
solr.ICUNormalizer2CharFilterFactory
此過濾器使用 ICU4J 執行預先分詞的 Unicode 正規化。
引數
form
-
選用
預設值:
nfkc_cf
Unicode 正規化形式,為
nfc
、nfkc
或nfkc_cf
其中之一。 mode
-
選用
預設值:
compose
compose
或decompose
。預設值為compose
。搭配name="nfc"
或name="nfkc"
使用decompose
,分別取得 NFD 或 NFKD。 filter
-
選用
預設值:
[]
UnicodeSet 模式。此集合之外的碼位永遠保持不變。預設值為
[]
,表示空集合,不進行篩選(所有碼位都會受到正規化)。
範例
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<charFilter name="icuNormalizer2"/>
<tokenizer ...>
[...]
</analyzer>
<analyzer>
<charFilter class="solr.ICUNormalizer2CharFilterFactory"/>
<tokenizer ...>
[...]
</analyzer>
solr.PatternReplaceCharFilterFactory
此過濾器使用正規表示式來替換或變更字元模式。
引數
pattern
-
必要
預設值:無
套用到輸入文字的正規表示式模式。
replacement
-
必要
預設值:無
用來替換符合模式的文字。
您可以在 schema 中像這樣設定此過濾器
-
使用名稱
-
使用類別名稱(舊版)
<analyzer>
<charFilter name="patternReplace"
pattern="([nN][oO]\.)\s*(\d+)" replacement="$1$2"/>
<tokenizer ...>
[...]
</analyzer>
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="([nN][oO]\.)\s*(\d+)" replacement="$1$2"/>
<tokenizer ...>
[...]
</analyzer>
下表提供以正規表示式為基礎的模式替換範例
輸入 | 模式 | 替換 | 輸出 | 描述 |
---|---|---|---|---|
see-ing looking |
|
|
see-ing look |
從字尾移除 "ing"。 |
see-ing looking |
|
|
see-ing look |
與上述相同。第二個括號可以省略。 |
No.1 NO. no. 543 |
|
|
#1 NO. #543 |
替換一些字串常值 |
abc=1234=5678 |
|
|
5678=abc=1234 |
變更群組的順序。 |