字符过滤器
CharFilter 是一种预处理输入字符的组件。
CharFilter 可以像令牌过滤器一样链接,并放在令牌生成器前面。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>
映射文件语法
-
以井号 (
#
) 开头的注释行以及空行将被忽略。 -
每行非注释、非空行都包含以下形式的映射:
"source" => "target"
-
双引号源字符串、可选空格、箭头 (
=>
)、可选空格、双引号目标字符串。
-
-
映射行上不允许有尾部注释。
-
源字符串必须至少包含一个字符,但目标字符串可以为空。
-
源字符串和目标字符串中识别以下字符转义序列
转义序列 结果字符 (ECMA-48 别名) Unicode 字符 示例映射行 \\
\
U+005C
"\\" => "/"
\"
"
U+0022
"\"and\"" => "'and'"
\b
退格 (BS)
U+0008
"\b" => " "
\t
制表符 (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
之一。 模式
-
可选
默认值:
compose
compose
或decompose
。默认值为compose
。将decompose
与name="nfc"
或name="nfkc"
结合使用,以分别获取 NFD 或 NFKD。 过滤器
-
可选
默认值:
[]
UnicodeSet 模式。集合之外的代码点始终保持不变。默认值为
[]
,作为空集合,不进行过滤(所有代码点都受规范化约束)。
示例
带名称
<analyzer>
<charFilter name="icuNormalizer2"/>
<tokenizer ...>
[...]
</analyzer>
带类名(旧版)
<analyzer>
<charFilter class="solr.ICUNormalizer2CharFilterFactory"/>
<tokenizer ...>
[...]
</analyzer>
solr.PatternReplaceCharFilterFactory
此过滤器使用正则表达式替换或更改字符模式。
参数
模式
-
必需
默认值:无
应用于传入文本的正则表达式模式。
替换
-
必需
默认值:无
用于替换匹配模式的文本。
可以在模式中配置此过滤器,如下所示
带名称
<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 |
更改组的顺序。 |