我正在测试一些用于ElasticSearch的自定义过滤器,并且因为我太执着,所以我决定也测试标准的html_strip字符过滤器,以确认我知道它是如何工作的。
因此,似乎我不知道它是如何工作的,因为我假设它将剥离所有HTML并将其替换为空,但是它似乎对不同的标记执行了不同的操作,例如p(和div)标记用换行符替换:
curl -XGET 'http://localhost:9200/test-analysis/_analyze?tokenizer=keyword&char_filters=html_strip&pretty=1' -d 'Oh <p class="stuff">pickles</p>!'
{
"tokens" : [ {
"token" : "Oh \npickles\n!",
"start_offset" : 0,
"end_offset" : 32,
"type" : "word",
"position" : 1
} ]
}
强标签和链接什么都不会替换:
curl -XGET 'http://localhost:9200/test-analysis/_analyze?tokenizer=keyword&char_filters=html_strip&pretty=1' -d 'Oh <a href="stuff">pickles</a>!'
{
"tokens" : [ {
"token" : "Oh pickles!",
"start_offset" : 0,
"end_offset" : 31,
"type" : "word",
"position" : 1
} ]
}
当然,我可以添加一个删除换行符的ANOTHER过滤器,但是关于此的任何文档吗?
这样做的原因行为是HTML块标记诸如<div>
,<p>
等由换行字符和HTML内嵌标记如取代a
,strong
等被简单消除。
HTMLStripCharFilter.java
在Lucene源代码中查看源代码时可以确认这一点。在该类的某个时刻,我们可以看到一些像这样的常量,它们可以说明一切:
private static final char BLOCK_LEVEL_START_TAG_REPLACEMENT = '\n';
private static final char BLOCK_LEVEL_END_TAG_REPLACEMENT = '\n';
private static final char BR_START_TAG_REPLACEMENT = '\n';
private static final char BR_END_TAG_REPLACEMENT = '\n';
private static final char SCRIPT_REPLACEMENT = '\n';
private static final char STYLE_REPLACEMENT = '\n';
private static final char REPLACEMENT_CHARACTER = '\uFFFD';
想法是或多或少地复制与在浏览器屏幕中呈现的文本段落相同的文本段落。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句