2012-04-03 8 views
2

Ich benutze Lunece.net 2.0.5 Version. Ich möchte alle Datensätze in der Indexdatei in einem Rasterformat (Tabellenformat) in einer ASP.NET-Webanwendung öffnen und anzeigen sowie eine Bearbeitungsoption für jede Zelle in diesem Raster bereitstellen. Aber ich weiß nicht, wie man jede Zeile aus der Indexdatei liest.Wie Zeilen aus den Indexdateien von Lucene.Net zu lesen sind

verwendet I-Code unten-

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

aber es gibt Liste eines jeden Begriff und hier bin ich nicht in der Lage zu aggregierten Daten von jeder Zeile (Datensatz).

Lassen Sie mich wissen, ob es eine Möglichkeit gibt, die Datei nach jeder Zeile zu lesen, oder ich muss die Version von Lucene aktualisieren, die ich gerade verwende.

Bitte geben Sie auch Links zu den besseren Dokumentationswebsites von Lucene.net an. v2.0.5 ist sehr alt:

+0

Was sollten die beiden Achsen sein? Begriff und Dokument? Und der Wert der Frequenz? Das wird riesig sein. – Reactormonk

+1

Lucene ist keine Zeilen- und Spalten-Datenbank und unterstützt keine Aktualisierungen einzelner Werte. Sie müssen wahrscheinlich eine relationale Datenbank verwenden. –

+1

Ich habe dieses für Sie gegooglet - siehe [hier] (http://www.jguru.com/faq/view.jsp?EID=587213). Ein anderer Ansatz könnte sein, MatchAllDocsQuery zu verwenden, aber dann erhalten Sie das komplette Array aller Doc-IDs, und in dem Ansatz, der in dem Post beschrieben ist, der mit dem oben verlinkten Objekt verbunden ist, erhalten Sie eine Enumeration. Ach ja, und folge dem Ratschlag aus einer der Antworten - benutze maxDoc(), nicht numDocs(). –

Antwort

4

Sie können

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 ohne Suche alle Datensätze/Zeilen (document s in Lucene-Terminologie) direkt aus dem Index lesen. versuchen neueste & größte Lucene.Net

+0

Es ist nützlich .. Danke –