2012-04-03 2 views
2

Lunece.net 2.0.5 버전을 사용하고 있습니다. ASP.NET 웹 응용 프로그램에서 표 파일 형식으로 인덱스 파일의 모든 레코드를 열고 해당 표의 각 셀에 대한 편집 옵션을 제공하려고합니다. 그러나 인덱스 파일에서 각 행을 읽는 방법을 모르겠습니다. Lucene.Net의 인덱스 파일에서 행을 읽는 방법

나는

private List<String> GetIndexTerms(string indexFolder) 
     { 
      List<String> termlist = new List<string>(); 
      IndexReader reader = IndexReader.Open(indexFolder, false); 
      TermEnum terms = reader.Terms(); 
      while (terms.Next()) 
      { 
       Term term = terms.Term(); 
       String termText = term.Text(); 
       int frequency = reader.DocFreq(term); 
       termlist.Add(termText); 
      } 
      reader.Close(); 
      return termlist; 
     } 

below- 코드를 사용하지만, 각 용어의 목록을 반환하고 여기에 내가 각 행 (레코드)에 의해 데이터를 집계 드릴 수 없습니다.

각 행별로 파일을 읽는 방법이 있는지 또는 현재 사용중인 Lucene 버전을 업데이트해야하는지 알려주세요.

또한 Lucene.net의 더 나은 설명서 웹 사이트에 대한 링크를 제공하십시오.

+0

무엇이 축이되어야합니까? 기간 및 문서? 그리고 주파수의 가치? 그것은 거대 할 것이다. – Reactormonk

+1

Lucene은 행 및 열 데이터베이스가 아니며 개별 값의 업데이트를 지원하지 않습니다. 아마도 관계형 데이터베이스를 사용해야 할 것입니다. –

+1

나는 당신을 위해 이것을 하나씩 봤다. [here] (http://www.jguru.com/faq/view.jsp?EID=587213)를 보라. 또 다른 접근법은 MatchAllDocsQuery를 사용할 수 있지만, 모든 doc id의 전체 배열을 얻습니다. 위의 링크에 설명 된 접근법에서 enum을 얻습니다. 오 그래, 대답 중 하나에서 조언을 따르십시오 - numDocs()가 아닌 maxDoc()를 사용하십시오. –

답변

4

당신은

var reader = IndexReader.Open(dir); 
for (int i = 0; i < reader.MaxDoc(); i++) 
{ 
    if (reader.IsDeleted(i)) continue; 

    Document d = reader.Document(i); 
    var fieldValuePairs = d.GetFields() 
          .Select(f => new { 
            Name = f.Name(), 
            Value = f.StringValue() }) 
          .ToArray(); 
} 

PS를 검색하지 않고 직접 인덱스의 모든 레코드/행 (루씬 용어로 document들)을 읽을 수 있습니다 : V2.0.5은 매우 오래되었습니다. 최신 & 최대 시도 Lucene.Net

+0

그 유용 .. 감사합니다 –

관련 문제