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

디버그를 시도하면, 내가 얻는 내용이 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);