字符过滤器(Character filters)用于在将字符流传递给标记生成器Tokenizer之前对其进行预处理,它负责将最原始的文本作为字符流进行接受,可以对通过添加、移除或改变字符的方式改变流。比如一个字符过滤器可以用来转换印度-阿拉伯数字٠١٢٣٤٥٦٧٨٩
变成等价的阿拉伯语数字0123456789
,或者从流中删除<b>
这样的HTML元素。ES有很多内置的字符过滤器,可以用于自定义的分析器中,主要有:
- HTML Strip Character Filter:
html_strip
字符过滤器可以将流中的类似于<b>
这样的HTML标签元素移除,并对HTML中类似于&
这样的实体进行解码; - Mapping Character Filter:
mapping
字符过滤器(映射字符过滤器)使用指定的替换字符替换指定字符串的任何出现的内容; - Pattern Replace Character Filter:
pattern_replace
字符过滤器将与正则表达式匹配的任何字符替换为指定的替换内容;
1. html标签字符过滤器(HTML Strip Char Filter)
html_strip
字符过滤器从文本中删除HTML元素,并用其解码值替换HTML实体(如用&
替换&
,在HTML语言中&
就是表示&
),如:
curl -X POST "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"tokenizer": "keyword",
"char_filter": [ "html_strip" ],
"text": "<p>I'm so <b>happy</b>!</p>"
}
'
返回的结果为[\nI'm so happy!\n]
,其中将HTML中的<p>
转换为\n
,将'
转换为'
。html_strip
字符过滤器是可配置的,接受的参数有:
escaped_tags
:表示一个包含HTML标签元素的列表(删除的HTML元素时,就将原始文本中出现的元素和这个列表中元素对比,如果是HTML元素且在该参数指定的列表中出现则保留,否则就移除);
下面是栗子:
curl -X PUT