/// <summary>
        /// レコードを検索します。
        /// </summary>
        /// <param name="keyword">検索キーワード</param>
        public IEnumerable <string> SearchRecord(string keyword)
        {
            string filePath = FileUtility.GetIndexFilePath(_storageDirectoryPath);

            if (String.IsNullOrEmpty(filePath))
            {
                Console.WriteLine("インデックスがありません。先にインデックスを作成してください。");
                yield break;
            }

            var keywordSplit = IndexUtility.SplitKeyword(keyword, Ngram).ToList();
            var indices      = IndexUtility.LoadIndexData(filePath, FileEncoding, keywordSplit);
            var result       = IndexUtility.SearchKeywordLines(keywordSplit.FirstOrDefault(), indices);

            foreach (var item in keywordSplit.Skip(1))
            {
                var next = IndexUtility.SearchKeywordLines(item, indices).ToList();
                result = result.Intersect(next);
            }

            var resultList = result.ToList();

            string csvFilePath = FileUtility.GetCsvFilePath(_storageDirectoryPath);

            foreach (var text in FileUtility.GetFileLines(resultList, csvFilePath, FileEncoding))
            {
                yield return(text);
            }
        }
Example #2
0
        public void SearchKeywordLines(string keyword, Dictionary <string, List <int> > indices, List <int> expected)
        {
            var actual = IndexUtility.SearchKeywordLines(keyword, indices).ToList();

            CollectionAssert.AreEqual(expected, actual);
        }