2011-01-17 6 views
1

Ich habe die Datenverfügbarkeit wie folgt, einige Daten werden in der Datenbank gespeichert und andere werden als PDF/Word/Excel-Dokumente in den Dateiserver hochgeladen. Wie sollte der Lucene-Index sein, wenn ich das obige alles indizieren möchte? Soll der Index für die Tabelle und die Dokumente unterschiedlich sein? so dass der Suchstring entlang der Indizes gesucht wird oder zu einem einzelnen Index mit verschiedenen Feldstrukturen kombiniert wird (unterstützt Lucene dies?)?Lucene Indizierung mehrerer Dokumente

dank V

+0

tun Sie einen anderen zwischen den Dokumenten in der Datenbank vornehmen möchten und die Dokumente auf dem Fileserver? – Tyzak

+0

Ja, sie sind unterschiedlich, die Datenbank enthält wenige Felder, aber die Texte der Dokumente (pdf/word) werden als solche indexiert. –

+0

Nun, wenn ich möchte, können Sie einen Index verwenden, und trennen Sie diese zwei Arten von Dokumenten durch ein Feld (wie ich in der Antwort beschrieben). Sie können überprüfen, von wo aus Sie das Dokument indizieren. und dann können Sie die Felder abhängig davon füllen. Später in der Anwendung können Sie das Feld überprüfen und nur die Dokumente aus dem Index verwenden, die Sie verwenden möchten :) – Tyzak

Antwort

0

, wenn Sie Sie können keinen Unterschied zwischen den Dokumenten vornehmen wollen, einen Index verwenden. Sie können die Struktur eines Ordners mit filesysteminfo durchlaufen. Mit filesysteminfo können Sie prüfen, ob es sich um einen Ordner oder ein Dokument handelt. Wenn es sich um ein Dokument handelt, indizieren Sie es, wenn Sie die Funktion nicht erneut aufrufen.

Dim filesysteminfo As FileSystemInfo 

     Dim FSIs As FileSystemInfo() = New DirectoryInfo(yourfolderroot).GetFileSystemInfos 

     For Each filesysteminfo In FSIs 

      If TypeOf filesysteminfo Is DirectoryInfo Then 

       function_create_document(filesysteminfo.FullName, indexwriter, id) 

      Else 


       Dim dynamic_doc As New Document() 

       Dim sr As System.IO.StreamReader = New StreamReader(filesysteminfo.FullName) 

       Dim filename As String = filesysteminfo.Name 


          ... 

, wenn Sie einen Unterschied machen möchten, können Sie überprüfen, ob Sie das Dokument aus der Datenbank oder aus dem File-Server erhalten. Speichern Sie einfach Ihre Informationen in einem Feld.

eine string verwenden (Yourstring), wenn Ihr Dokument aus der Datenbank yout String ist „Datenbank“ sonst ist es „File-Server“

Dim field_typ As Field = New Field("doc_typ", yourstring, Field.Store.YES, Field.Index.TOKENIZED) 
Verwandte Themen