2013-04-18 67 views
1

我試圖在Lucene索引上搜索一些我知道索引但是結果不是很好的特定單詞。在Lucene索引中搜索特定術語

如何執行對特定術語(「129202」)的查詢?我試過在字符串的開頭添加加號,但它不起作用。

我的查詢:

QueryParser q = new QueryParser(Version.LUCENE_42, "tags", new SimpleAnalyzer(Version.LUCENE_42)); 
Query query = q.parse("sapatilha feminina ramarim 129202 cinza"); 

下面是一個文件(XML)的索引,我想

<?xml version="1.0" encoding="UTF-8"?> 
<product> 
<tags> 
    <tag>Sapatilha Pedras Preto</tag> 
    <tag>ramarin</tag> 
    <tag>ramarin 129202</tag> 
    <tag>preto</tag> 
</tags> 
<id>71</id> 
<url>http://www.dafiti.com.br/Sapatilha-Pedras-Preto-1135428.html</url> 
</product> 
+0

「的結果不是很好「 - 你需要比這更具體。 – mindas

回答

1

SimpleAnalyzer,您使用查詢分析器(我假設索引) ,使用LetterTokenizer,根據文檔:

...將令牌定義爲最大鄰接字符串nt字符,由java.lang.Character.isLetter()定義

也就是說,不是數字。這個分析儀將完全丟失數字。我建議你看看另一個,例如StandardAnalyzerWhitespaceAnalyzer


爲了證明:

StringReader reader = new StringReader("ramarim 129202 cinza"); 
LetterTokenizer stream = new LetterTokenizer(Version.LUCENE_42, reader);   
stream.setReader(reader); 
stream.reset(); 
while(stream.incrementToken()) { 
    System.out.println(stream.reflectAsString(false)); 
} 
stream.close(); 

輸出:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26 
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39 

StandardTokenizer代(這是用來通過StandardAnalyzer)將讓你:

term=ramarim,bytes=[72 61 6d 61 72 69 6d],startOffset=19,endOffset=26,positionIncrement=1,type=<ALPHANUM> 
term=129202,bytes=[31 32 39 32 30 32],startOffset=27,endOffset=33,positionIncrement=1,type=<NUM> 
term=cinza,bytes=[63 69 6e 7a 61],startOffset=34,endOffset=39,positionIncrement=1,type=<ALPHANUM> 
+0

tks ...我使用StandardAnalyzer重新創建索引,它可以工作。 – adrianogf