2010-10-24 24 views
4

我有一个StandardAnalyzer工作,它使用填充HashMap的TermVectorMapper从单个文档检索单词和频率。如何在Lucene中用连字符索引单词?

但是,如果使用下面的文字作为我的文档中的一个字段,即

addDoc(w, "lucene Lawton-Browne Lucene"); 

频率在HashMap中返回的字是:

布朗1个 Lucene的2 劳顿1

问题在于“lawton”和“browne”。如果这是一个真正的“双管”名称,Lucene是否可以将其识别为“Lawton-Browne”,其名称实际上是一个单词?

我试过的组合:

addDoc(w, "lucene \”Lawton-Browne\” Lucene"); 

而且单引号,但没有成功。

谢谢

摩根先生。

回答

0
+0

这可能在queryparsersyntax在字符转义,但在工作我例如,使用addDoc(w,“lucene Lawton \\ - Browne Lucene”);输出保持不变。我试过了一个WhitespaceAnalyzer,它给了我一个单词的名字,但是这并不包含同一个单词的重复单词。 – 2010-10-24 21:14:19

+0

我相信一个WhitespaceAnalyzer应该可以正常工作。你能不能在addDoc上发布一些更多的代码来澄清这一点? – 2010-10-25 09:33:24

+0

如果我在调用分析器之前将所有的标记设置为小写,那么WhiteSpaceAnalyzer似乎给了我想要的。但是这种类型不允许有一点约束的停止词。 – 2010-10-25 21:39:18

1

Lucene的文档如果您仍然希望能够使用一个停用词列表,我建议你试试PatternAnalyzer。它允许这样的列表并且具有预填充的空白模式。

或者您缠绕空白分析仪和做这样的事情在的TokenStream(字符串字段名,读者阅读器),你做这样的事情:

public TokenStream tokenStream(String fieldName, Reader reader) { 
    TokenStream stream = myWhitespaceAnalyzer.tokenStream(fieldName, Reader); 
    stream = new StopFilter(stream, stopWords); 
    return stream; 
}