2013-04-18 7 views
1

J'essaie d'effectuer une recherche sur un index Lucene avec des mots spécifiques que je sais être indexés mais le résultat n'est pas très bon.Recherche d'un terme spécifique dans un index Lucene

Comment effectuer une requête sur un terme spécifique ("129202")? J'ai essayé d'ajouter le signe plus au début de la chaîne, mais cela n'a pas fonctionné.

Ma requête:

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

est Ci-dessous un document (xml) indexé que je veux

<?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

"le résultat est pas très bon "- vous besoin d'être plus précis que cela. – mindas

Répondre

1

SimpleAnalyzer, l'analyseur que vous utilisez pour interroger (et je suppose à l'index) , utilise un LetterTokenizer, qui, selon la documentation:

... définit les jetons comme des chaînes maximales d'adjace nt lettres, telles que définies par java.lang.Character.isLetter()

Ce qui veut dire, pas de nombres. Les nombres seront entièrement perdus par cet analyseur. Je vous recommande de regarder dans un autre, comme StandardAnalyzer ou WhitespaceAnalyzer.


Pour démontrer:

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(); 

Sorties:

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 

Substituer à StandardTokenizer (qui est utilisé par StandardAnalyzer) vous obtiendrez:

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 ... Je recréer l'index avec StandardAnalyzer et ça marche. – adrianogf