2014-10-06 3 views
0

많은 문서가있는 lucene 색인이 있습니다. 지금은lucene 색인의 모든 문서에서 한 문서의 용어 찾기

, 나는이 코드 모든 문서 경로의 목록 표시 :

public List<Verbatim> GetAllPath(string indexFolder) 
    { 
     FSDirectory directory = FSDirectory.Open(indexFolder); 
     List<string> pathlist = new List<Verbatim>(); 

     IndexReader reader = IndexReader.Open(directory, true); 

     for (int i = 0; i < reader.NumDocs(); i++) 
     { 
      if (reader.IsDeleted(i)) 
       continue; 

      Document doc = reader.Document(i); 

      pathlist.Add(doc.GetFields("path")); 
     } 

     reader.Dispose(); 
     return termlist; 
    } 

을하지만 지금은 문서의 조건을 그 목록을 나열 할 수 있습니다. 이 용어는 "텍스트"필드에 있습니다. 이 코드를 사용하여이 목록을 만들려고 시도하지만 가능한 것은 아닙니다.

내 필드는 다음과 같이 정의된다 :

 doc.Add(new Field("date", DateTime.Now.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 
     doc.Add(new Field("path", path, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
     doc.Add(new Field("title", System.Web.HttpUtility.HtmlDecode(title), Field.Store.YES, Field.Index.ANALYZED)); 
     doc.Add(new Field("text", ParseHtml(text, false), Field.Store.YES, Field.Index.ANALYZED)); 

어떻게 하나 개의 문서의 모든 조건을 나열 할 수 있습니다? 이 코드 사용할 수있는 새로운 옵션을

doc.Add(new Field("text", ParseHtml(text, true), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES)); 

:

답변

0

내가 이렇게 내 필드 정의에 Field.TermVector.YES를 추가

doc.LuceneTerms = new List<LuceneTerm>(); 
var termFreq = reader.GetTermFreqVector(docId, "text"); 

list<string> terms = new list<string>(); 

for (int i = 0; i < termFreq.GetTerms().Length; i++) 
{ 
    terms .Add(termFreq.GetTerms()[i]); 
} 

을 나는 측면의 목록을 얻으 내 문서