/// <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); } }
public void SearchKeywordLines(string keyword, Dictionary <string, List <int> > indices, List <int> expected) { var actual = IndexUtility.SearchKeywordLines(keyword, indices).ToList(); CollectionAssert.AreEqual(expected, actual); }