2010-05-09 4 views
0

Je commence avec Lucene.Net (coincé sur la version 2.3.1). Ajouter des exemples de documents avec ceci:Mes requêtes Lucene ne trouvent qu'un seul hit

Dim indexWriter = New IndexWriter(indexDir, New Standard.StandardAnalyzer(), True) 
    Dim doc = Document() 
    doc.Add(New Field("Title", "foo", Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)) 
    doc.Add(New Field("Date", DateTime.UtcNow.ToString, Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)) 
    indexWriter.AddDocument(doc) 
    indexWriter.Close() 

Je recherche des documents correspondant à « foo » avec ceci:

Dim searcher = New IndexSearcher(indexDir) 
Dim parser = New QueryParser("Title", New StandardAnalyzer()) 
Dim Query = parser.Parse("foo") 
Dim hits = searcher.Search(Query) 
Console.WriteLine("Number of hits = " + hits.Length.ToString) 

Peu importe combien de fois je cours, je ne jamais obtenir un résultat. Des idées?

Répondre

2

Mikos a raison de recréer l'index, votre problème est ici:

Dim indexWriter = New IndexWriter(indexDir, New Standard.StandardAnalyzer(), True) 

Parce que vous passez vrai, vous recréez l'index à chaque fois - besoin de vérifier l'existence et de créer si nécessaire.

je suis tombé sur ce il y a un moment, voici comment je suis autour de lui:

If _writer Is Nothing Then 
     Dim create As Boolean = Not System.IO.Directory.Exists(path) OrElse System.IO.Directory.GetFiles(path).Length = 0 

     _directory = FSDirectory.GetDirectory(path, _lockFactory) 
     _writer = New IndexWriter(_directory, _analyzer, create) 
    End If 

Où chemin est le chemin de votre index. Je ne sais pas si c'est la meilleure approche, mais cela fonctionne pour moi (en utilisant lucene.net 2.3 également).

En outre, vous devriez éviter de créer l'auteur chaque fois si vous pouvez - Lucene ne va pas comme si vous obtenez dans une situation où vous avez> 1 auteur ouvert sur un indice particulier

1

Vérifiez le nombre de documents dans votre index en utilisant Luke. Pourrait très bien être quelque chose dans votre routine d'ajout de document.

+2

Je suppose que vous écrasez (recréer) l'index dans votre boucle d'écriture. Assurez-vous que votre code de création d'index est en dehors de la boucle d'écriture – Mikos