基本的には、いくつかのカテゴリにグループ化されたSQLテーブル内にいくつかの製品があります。たとえば、ラップトップ、カメラ、MP3プレーヤーなどです。今では、これらのカテゴリ(ラップトップなど)で製品を購入する際に、その機能やオプションに基づいて詳細にドリルダウンする必要があります。 (例 - RAMサイズ(1GB、4GB、..)、プロセッサタイプ(Core i7、Core i3 ..)、ハードドライブサイズ(250GB、500GBなど)当初、私はこの分類をMSSQLのContains('COLUMNNAME', 'FormsOf(Inflectional, SOMEWORD))
を使って行った。このアプローチは機能しますが、データベース内のすべてのレコードを終了するのに8時間近くかかります。 (300K records)C# - 辞書の値<string、string>が指定された文字列と一致する場合
これで、私はRegexベースの実装を考えています。だからここまで私が思いついたのはここです。このコードははっきりしているかもしれません。
private static void Main(string[] args)
{
var productList = new Dictionary<string, string>
{
{"10101", "Samsung NF210 Netbook - 10.1ins - 1GB RAM - 250GB Hard Drive"},
{"10102", "Samsung NP-NF210 Netbook, Intel Atom 1.5GHz, 1GB RAM, 250GB with 10.1 Inch Display, Silver"},
{"10103", "Sony Vaio VPC-F13Z0E/B Laptop, Intel Core i7, 1.73GHz, 6GB RAM, 640GB with 16.4 Inch Display, Black"}
};
var featureList = new Dictionary<int, string>
{
{1, "1 GB"}, // RAM SIZE
{2, "2 GB"}, // RAM SIZE
{3, "250GB"}, // HARD DRIVE SIZE
{4, "640GB"}, // HARD DRIVE SIZE
{5,"Core i7"}, // Porcessor Type
{6,"Core i3"}, // Porcessor Type
{7,"Netbook"}, // Type
{8,"Laptop"} // Type
};
foreach (var feature in featureList)
{
var keyword1 = feature;
var results = from result in productList
where Regex.IsMatch(result.Value, keyword1.Value, RegexOptions.Singleline)
select result;
foreach (var result in results)
{
Console.WriteLine(feature.Key + " - " + feature.Value);
Console.WriteLine(result.Key + " - " + result.Value);
Console.WriteLine("");
}
}
Console.ReadKey();
}
私の実際の質問は、このアプローチが有効かどうかです。私がやったやり方はSQL Contains
ほど良くないと思うが、それはうまくいくようだ。その他の提案はありますか?
注:辞書は、*一意のキー*に基づく高速検索の考え方に基づいて構築されています。代わりにあなたのロジックが価値に焦点を合わせると、あなたは間違ったツールや誤った方法論を使用している可能性があります。 –
あなたの質問は:Regexは、テキスト検索に最適なアプローチは、私ははいと言うでしょうか。 – jaywayco
'var results = ...'行を実行しようとしましたが、例外が発生すると思います。そして、あなたは常にRegexを更新/保守します。 – IAbstract