2012-04-03 5 views
2

私はLunece.net 2.0.5バージョンを使用しています。 ASP.NET Webアプリケーションで、インデックスファイル内のすべてのレコードをグリッド(テーブル)形式で表示し、そのグリッド内の各セルに対して編集オプションを提供したいとします。 しかし、インデックスファイルから各行を読み込む方法がわかりません。Lucene.Netのインデックスファイルから行を読み取る方法

Iは

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の優れたドキュメントWebサイトへのリンクを提供してください。

+0

どのような2つの軸が必要ですか?期間とドキュメント?そして、周波数の値は?それは巨大になるだろう。 – Reactormonk

+1

Luceneは行と列のデータベースではなく、個々の値の更新をサポートしていません。おそらく、リレーショナルデータベースを使用する必要があります。 –

+1

私はあなたのためにこれをgoogled - [ここ](http://www.jguru.com/faq/view.jsp?EID=587213)を見てください。別のアプローチでは、MatchAllDocsQueryを使用することもできますが、すべてのドキュメント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を検索することなく、直接、インデックスからすべてのレコード/行(Luceneの用語でdocument複数可)を読むことができます:v2.0.5は非常に古いです。最新&最大Lucene.Net

+0

その便利な..ありがとう –

関連する問題