/// <summary>
        /// 無視対象のファイル情報を、クロール済みの文書データの中から一括取得
        /// </summary>
        public virtual List <IgnoredDocumentRecord> GetIgnoredDocumentRecords(IgnoreSetting ignoreSetting)
        {
            var ret = new List <IgnoredDocumentRecord>();

            // 無視対象となりうる文書データを全取得
            var selectRes = GM.Select(
                Table.Documents
                , outputColumns: new[] { Column.Documents.KEY, Column.Documents.FILE_PATH }
                , limit: -1
                , sortKeys: new[] { Column.Documents.KEY }
                , filter: $"{Column.Documents.KEY} @^ {Groonga.Util.EscapeForScript(Util.MakeDocumentDirKeyPrefix(ignoreSetting.DirPathLower))}" // ベースフォルダパスから始まるキーを検索
                );

            // 無視対象の文書データをリストに格納して返す
            var ignoredPaths = new List <string>();

            foreach (var rec in selectRes.SearchResult.Records)
            {
                var key  = (string)rec.Key;
                var path = (string)rec[Column.Documents.FILE_PATH];

                if (ignoreSetting.IsMatch(path, isDirectory: false))
                {
                    ret.Add(new IgnoredDocumentRecord {
                        Key = key, FilePath = path
                    });
                }
            }
            ;
            return(ret);
        }
Exemple #2
0
        /// <summary>
        /// 無視設定ファイルの内容を読み込んでインスタンスを生成
        /// </summary>
        /// <param name="path">.inazumaignore ファイルのパス</param>
        public static IgnoreSetting Load(string baseDirPath, IEnumerable <string> lines)
        {
            var setting = new IgnoreSetting(baseDirPath);

            setting.LoadInternal(lines);
            return(setting);
        }
Exemple #3
0
        /// <summary>
        /// .inazumaignore ファイルの内容を読み込んでインスタンスを生成
        /// </summary>
        /// <param name="path">.inazumaignore ファイルのパス</param>
        public static IgnoreSetting Load(string path)
        {
            var setting = new IgnoreSetting(Path.GetDirectoryName(path));

            setting.LoadInternal(path);
            return(setting);
        }
        /// <summary>
        /// ユーザー設定から無視設定一覧を取得
        /// </summary>
        public virtual List <IgnoreSetting> GetIgnoreSettings()
        {
            var settings = new List <IgnoreSetting>();

            foreach (var folderSetting in UserSettings.TargetFolders)
            {
                if (folderSetting.IgnoreSettingLines != null && folderSetting.IgnoreSettingLines.Count >= 1)
                {
                    var newSetting = IgnoreSetting.Load(folderSetting.Path, folderSetting.IgnoreSettingLines);
                    settings.Add(newSetting);
                }
            }

            return(settings);
        }
        /// <summary>
        /// 無視対象のファイルを一括削除
        /// </summary>
        public virtual void DeleteIgnoredDocumentRecords(IgnoreSetting ignoreSetting)
        {
            // 無視対象のファイル情報を取得
            var recs = GetIgnoredDocumentRecords(ignoreSetting);

            // ログ出力
            foreach (var rec in recs)
            {
                Logger.Debug($"Purge - {rec.FilePath}");
            }

            // 20件ずつまとめて削除
            var chunkSize = 20;
            var chunks    = recs.Select((r, i) => Tuple.Create(r, i))
                            .GroupBy(t => t.Item2 / chunkSize)
                            .Select(g => g.Select(t => t.Item1));

            foreach (var recsInChunk in chunks)
            {
                var subExprs = recsInChunk.Select(r => $"{Column.Documents.KEY} == {Groonga.Util.EscapeForScript(r.Key)}");
                GM.Delete(Table.Documents, filter: string.Join(" || ", subExprs));
            }
            ;
        }