2016-09-04 2 views
0

Я новичок в Lucene.net. У меня есть ситуация, когда мне нужно искать все документы в папке для ключевого слова, которое было введено пользователем.Невозможно получить искомый документ с помощью Lucene.net

Я проиндексировал все файлы в папке и подготовил запрос для ключевых слов, введенных пользователем, и выполнил поиск.

Проблема в том, что я мог бы получить хиты, и когда я попытался перебрать удары, я не смог получить поля из документов хитов.

Вот мой код.

public void Searching() 
{ 
    Analyzer analyzer = new StandardAnalyzer(luceneVersion.Version.LUCENE_29); 
    QueryParser parser = new QueryParser(luceneVersion.Version.LUCENE_29, "content", analyzer); 
    Query query = parser.Parse(txtSearchText.Text); 

    Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(txtIndexPath.Text.Trim())); 
    Searcher searcher = new IndexSearcher(IndexReader.Open(directory, true)); 
    TopScoreDocCollector collector = TopScoreDocCollector.Create(100, true): 
    searcher.Search(query, collector); 
    ScoreDoc [] hits = collector.TopDocs(). ScoreDocs; 

    foreach (ScoreDoc hit in hits) 
    { 
     int id = hit.Doc; 
     float score = hit.Score; 

     Document doc = searcher.Doc(id); 

     string content = doc.Get("content"); // null 
    } 
} 

При попытке отладки контент, который я получаю, пуст.

Я ничего не теряю в своем коде, это буквально забивает меня с полдня на всем пути. Пожалуйста, помогите мне.

Заранее спасибо.

ответ

0

Я пробовал все, что бы я ни делал. Проблема в том, что я индексировал, не сохраняя поле id документа в файле индекса.

Вот код, который я использовал при индексировании.

doc.Add(new Field("id", id, Field.Store.NO, Field.Index.ANALYZED); 

Хотя это должно быть следующим образом, чтобы оно было доступно в индексном файле.

doc.Add(new Field("id", id, Field.Store.YES, Field.Index.ANALYZED);