为什么“multi foo”解析的值是“(multi multi2)foo”

时间:2011-04-21 09:48:43

标签: java lucene

对不起我的英语很差,希望你能看到我说的话。

在Lucene3 Junit测试代码:org.apache.lucene.queryParser.TestMultiAnalyzer.testMultiAnalyzer()

QueryParser qp = new QueryParser(Version.LUCENE_CURRENT, "", new MultiAnalyzer());

 // two tokens at the same position:
assertEquals("(multi multi2) foo", qp.parse("multi foo").toString());
assertEquals("foo (multi multi2)", qp.parse("foo multi").toString());

我不明白为什么“multi foo”解析的值是“(multi multi2)foo”。

我在google.com和baidu.com上搜索过,没有结果。

2 个答案:

答案 0 :(得分:1)

MultiAnalyzer类(已定义in the same Java file)具有注释:

/**
 * Expands "multi" to "multi" and "multi2", both at the same position,
 * and expands "triplemulti" to "triplemulti", "multi3", and "multi2".  
 */

这可能解释了它......

答案 1 :(得分:1)

看起来你已经从TestMultiAnalyzer.java获取了测试代码。如果查看代码,可以看到Javadoc和类MultiAnalyzer的定义:

/**
 * Expands "multi" to "multi" and "multi2", both at the same position,
 * and expands "triplemulti" to "triplemulti", "multi3", and "multi2".  
 */
private class MultiAnalyzer extends Analyzer {
    // <snipped>
}

所以,Javadoc解释了发生了什么:“multi”将成为“multi multi2”。如果您想确切知道为什么会发生这种情况,请通过代码进行调试并阅读所有相关的Javadoc。如果你再次陷入困境,请在这里提问。