Пример #1
0
        public void LoadLogFiles(IEnumerable <string> logFiles, ProgressBroadcaster pb = null)
        {
            if (pb == null)
            {
                // Rather than check for null all over the place we will just
                // user a dummy broadcaster that has no listeners.
                pb = new ProgressBroadcaster();
            }

            // Drop index and we will rebuild all at once after we have pulled in all the records
            pb.BroadcastStatus("Dropping indexes...");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_EntryID;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_TimeStamp;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_LineNumber;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_FilenameID;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_ChannelID;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_LevelID;");
            Database.ExecuteNonQuery("DROP INDEX IF EXISTS IDX_SourceID;");

            long overallRecordCount = 0;

            // Open things up for writing to the index
            SearchIndex.BeginWrite();

            foreach (var logFile in logFiles)
            {
                overallRecordCount = LoadLogFile(logFile, overallRecordCount, pb);
            }

            // Tell search index to close
            SearchIndex.EndWrite();

            // SQLite is faster building whole index at once rather than on each insert, so earlier
            // we dropped the index and now we rebuild it
            pb.BroadcastStatus("Rebuilding indexes...");
            Database.ExecuteNonQuery("CREATE INDEX IDX_EntryID ON LogEntry (ID);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_TimeStamp ON LogEntry (TimeStamp);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_LineNumber ON LogEntry (LineNumber);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_FilenameID ON FileName (ID);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_ChannelID ON Channel (ID);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_LevelID ON Level (ID);");
            Database.ExecuteNonQuery("CREATE INDEX IDX_SourceID ON Level (ID);");
        }