CharFilter是预处理输入字符的组件。
CharFilters可以像Token Filters一样链接起来,并放置在分词器前面。
CharFilters可以添加、更改或移除字符,同时保留原始字符偏移量以支持高亮显示等功能。
solr.MappingCharFilterFactory
此过滤器创建org.apache.lucene.analysis.MappingCharFilter
,可用于将一个字符串更改为另一个(例如,将é
标准化为e
)。
此过滤器需要指定一个mapping
参数,这是包含要执行映射的文件的路径和名称。
示例:
使用名称:
1 | <analyzer> |
使用类名(遗留):
1 | <analyzer> |
映射文件语法:
- 以井号(
#
)开头的注释行以及空行都被忽略。 - 每个非注释、非空行由以下形式的映射组成:
"source" => "target"
- 双引号源字符串,可选空白,箭头(
=>
),可选空白,双引号目标字符串。
- 双引号源字符串,可选空白,箭头(
- 映射行上不允许尾随注释。
- 源字符串必须包含至少一个字符,但目标字符串可以为空。
- 在源字符串和目标字符串中识别以下字符转义序列:
转义序列 | 结果字符 | 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或分词器。
此过滤器:
- 移除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 <a href="www.foo.bar">link</a> |
my link |
<br>hello<!--comment--> |
hello |
hello<script><!-- f('<!--internal--></script>'); --></script> |
hello |
if a<b then print a; |
if a<b then print a; |
hello <td height=22 nowrap align="left"> |
hello |
a<b A Alpha&Omega Ω |
a<b A Alpha&Omega Ω |
示例:
使用名称:
1 | <analyzer> |
使用类名(遗留):
1 | <analyzer> |
solr.ICUNormalizer2CharFilterFactory
此过滤器使用ICU4J执行预分词Unicode标准化。
参数:
form(可选,默认:nfkc_cf
):
一个Unicode标准化形式,nfc
、nfkc
或nfkc_cf
之一。
mode(可选,默认:compose
):compose
或decompose
之一。
默认是compose
。
使用decompose
与name="nfc"
或name="nfkc"
分别得到NFD或NFKD。
filter(可选,默认:[]
):
一个UnicodeSet模式。
集合外的代码点总是保持不变。
默认是[]
,作为空集,不过滤(所有代码点都受标准化影响)。
示例:
使用名称:
1 | <analyzer> |
使用类名(遗留):
1 | <analyzer> |
solr.PatternReplaceCharFilterFactory
此过滤器使用正则表达式替换或更改字符模式。
参数:
pattern(必需):
要应用于传入文本的正则表达式模式。
replacement(必需):
用于替换匹配模式的文本。
你可以在schema中这样配置此过滤器:
使用名称:
1 | <analyzer> |
使用类名(遗留):
1 | <analyzer> |
下表展示了基于正则表达式的模式替换示例:
输入 | 模式 | 替换 | 输出 | 描述 |
---|---|---|---|---|
see-ing looking | (\w+)(ing) |
$1 |
see-ing look | 移除词末的”ing”。 |
see-ing looking | (\w+)ing |
$1 |
see-ing look | 与上面相同。第2个括号可以省略。 |
No.1 NO. no. 543 | [nN][oO]\.\s*(\d+) |
#$1 |
#1 NO. #543 | 替换一些字符串文字 |
abc=1234=5678 | (\w+)=(\d+)=(\d+) |
$3=$1=$2 |
5678=abc=1234 | 改变组的顺序。 |