2016-06-10 30 views
0

我正在测试ElasticSearch的一些自定义过滤器,因为我很迷恋,所以我决定测试标准的html_strip字符过滤器,以确认我知道它是如何工作的。ElasticSearch中的html_strip字符过滤器用换行符替换标签?

如此看来,我知道它是如何工作的,因为我认为它会去除所有的HTML,并没有取代它,但它似乎对不同的标签,例如做不同的事情P(与格)标签与换行符替换:

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 
} ] 
} 

当然,我可以添加另一个过滤器,去除换行符,但没有任何有关文档这个?

回答

0

这样做的原因行为是HTML块标签如<div><p>等由换行字符和HTML内嵌标记如astrong等被简单地消除更换。

当在Lucene源代码中查看HTMLStripCharFilter.java的源代码时,可以确认这一点。在该类中的某些时候,我们可以看到几个常数这样的,这不言自明:

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'; 

的想法是或多或少复制相同文本的段落将在浏览器屏幕呈现。

+0

非常感谢您的链接!这是有道理的,给出过滤器名称就很奇怪。 – esperluette