2010-09-24 8 views
0

J'essaye de comprendre Lucene SpanNearQuery et ai écrit un exemple factice. Je suis à la recherche de "non" suivi de "renard" à moins de 5 l'un de l'autre. Je m'attendrais à ce que le document 3 soit retourné comme seul hit. Cependant, je finis par ne pas avoir de hits. Toute idée de ce que je pourrais faire de mal sera appréciée.Lucene SpanNearQuery

Voici le code:

// indexation

public void doSpanIndexing() throws IOException { 

IndexWriter writer=new IndexWriter(directory, AnalyzerUtil.getPorterStemmerAnalyzer(new StandardAnalyzer(Version.LUCENE_30)),IndexWriter.MaxFieldLength.LIMITED); 

Document doc1=new Document(); 
doc1.add(new Field("content", " brown fox jumped ", Field.Store.YES, Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); 
writer.addDocument(doc1); 


Document doc2=new Document(); 
doc2.add(new Field("content", "foxes not jumped over the huge fence", Field.Store.YES, Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS)); 
writer.addDocument(doc2); 

Document doc3=new Document(); 
doc3.add(new Field("content", " brown not fox", Field.Store.YES, Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); 
writer.addDocument(doc3); 


} 

// recherche
public void doSpanSearching (texte String) jette CorruptIndexException, IOException, ParseException {

IndexSearcher searcher=new IndexSearcher(directory); 

SpanTermQuery term1 = new SpanTermQuery(new Term("content", "not")); 
SpanTermQuery term2 = new SpanTermQuery(new Term("content", text)); 
SpanNearQuery query = new SpanNearQuery(new SpanQuery[] {term1, term2}, 5, true); 
TopDocs topDocs=searcher.search(query,5); 

for(int i=0; i<topDocs.totalHits; i++) { 
    System.out.println("Hit Document number: "+topDocs.scoreDocs[i].doc); 
    System.out.println("Hit Document score: "+topDocs.scoreDocs[i].score); 
    Document result=searcher.doc(topDocs.scoreDocs[i].doc); 
    System.out.println("Search result "+(i+1)+ " is "+result.get("content")); 

    } 

} 

Répondre

0

" Non "est un mot d'arrêt dans l'analyseur standard (c'est-à-dire qu'il est supprimé de votre texte). Pouvez-vous l'essayer avec un autre mot qui n'est pas un mot d'arrêt?

+0

J'ai remplacé "non" par "marron", toujours aucun résultat. Des idées? Merci pour le pointeur sur "Not" étant omis lors de l'indexation. Je l'ai complètement oublié. –