为什么在此分析器示例中FlattenGraphFilter(在SynonymGraphFilter之后)什么也不做?

时间:2019-03-21 16:59:38

标签: lucene

我试图使同义词正常工作,为此,我试图理解令牌流中更好的图。

为此,我构建了以下代码:

            builder.addTokenFilter(FlattenGraphFilterFactory.class); // nothing changes with this!
            Analyzer analyzer = builder.build();
            TokenStream ts = analyzer.tokenStream("*", new StringReader("go to the webpage!"));

(MySynonymGraphFilterFactory只是用于传递同义词列表的黑客。它扩展了将所有内容映射到所有内容的功能。)

tokenStreamToString()

然后我调用一个 System.out.println(tokenStreamToString(ts)); 函数,该函数仅转储术语,位置增量和位置长度(该函数的代码包含在此问题的底部):

FlattenGraphFilter

我不明白的是这个。无论是否包含navigate<2> (0)open<2> (0)go to the webpage ,我都会得到相同的输出。这是输出:

tokenStreamToString()

(尖括号显示上一项的位置长度;括号显示下一项的位置增量)

有些东西我在这里不明白。我以为拉平流意味着没有令牌的位置长度> 1 ...我错了吗?我将不胜感激能帮助您理解这一点。

PS:我的调试功能 static String tokenStreamToString(TokenStream stream) throws IOException { CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); PositionIncrementAttribute posAtt = stream.addAttribute(PositionIncrementAttribute.class); PositionLengthAttribute posLenAtt = stream.addAttribute(PositionLengthAttribute.class); StringBuilder sb = new StringBuilder(); stream.reset(); while(stream.incrementToken()) { int inc = posAtt.getPositionIncrement(); if(inc != 1) sb.append('(').append(inc).append(')'); sb.append(termAtt.toString()); int posLen = posLenAtt.getPositionLength(); if(posLen != 1) sb.append('<').append(posLen).append('>'); sb.append(' '); } return sb.toString(); } 的实现:

{{1}}

谢谢。

0 个答案:

没有答案