2010-05-09 3 views
0

Я начинаю с Lucene.Net (застрял в версии 2.3.1). Добавить образцы документов с этим:Мои запросы Lucene всегда находят один удар

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

Я поиск документов, соответствующих «Foo» с этим:

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) 

Независимо от того, сколько раз я запускаю это, я только когда-либо получить один результат. Есть идеи?

ответ

2

Микос прав о восстановлении индекса, ваша проблема здесь:

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

Поскольку вы передаете верно, вы Воссоздание индексировать каждый раз - необходимо проверить наличие и создать ЕСЛИ НУЖНО.

Я побежал в этом некоторое время назад, вот как я получил вокруг него:

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 

Где путь это путь к вашему индексу. Не уверен, что это лучший подход, но он работает для меня (также используя lucene.net 2.3).

Кроме того, следует избегать создания писателю каждый раз, если вы - Lucene не собирается нравится, если вы получаете в ситуации, когда у вас есть> 1 писатель работает по определенному индексу

1

Проверьте, сколько документов указано в вашем индексе, используя Luke. Может быть, что-то в вашем документе добавляет рутину.

+2

Я подозреваю, вы перезапись (воссоздавая) индекс в вашем цикле записи. Убедитесь, что код создания индекса находится за пределами цикла записи – Mikos

Смежные вопросы