0

データベースに接続されたかなり単純な MVC webapp があります。ユーザーは、単一のテーブルから特定のレコードを取得する検索ページを必要としています。ユーザーは 1 つ以上のキーワードを指定できます。検索機能は、タイトル、説明、または poc の 3 つの異なる列にこれらのキーワードを含むレコードを検索する必要があります。

次の設定がありますが、正しくありません。いずれかのキーワードを含むレコードを提供しています。結果は、すべてのキーワードを含むレコードである必要があります。また、これが検索関数を作成する最良の方法であるかどうかはわかりません...

// searchString contains all keywords delimited by spaces
string[] keywordArray = Regex.Split(searchString, "\\s");

var model = new List<MyTable>();
foreach (string word in keywordArray)
{
   foreach (var record in myTableRepository.MyTable.Where(x => x.title.ToLower().Contains(word.ToLower()) || (x.description != null && x.description.ToLower().Contains(word.ToLower())) || (x.poc != null && x.poc.ToLower().Contains(word.ToLower()))).ToList())
   {
       model.Add(new MyTable
       {
          id = record.id,
          title = record.title,
          description = record.description, 
          poc = record.poc
       });
   }
}
return View(model);

たとえば、ユーザーが次の検索基準「john test phase」を指定した場合、結果は次のようになります。

title                   description                  poc
Lorem Ipsum Test A      Phase A lorem ipsum          john doe
Lorem Ipsum phase       This is john test for jack   jane doe
Lorem Ipsum             John test for jim            clark phase

等..

アドバイスとヒントを事前にありがとう!

4

1 に答える 1

1

一度に 1 つのレコードを検索し、1 つのレコード内のすべてのキーワードを確認することをお勧めします。おそらく、特定のエントリに関連付けられたすべての単語を 1 つの変数に収集し、それからすべてのキーワードを検索できます。

// searchString contains all keywords delimited by spaces
string[] keywordArray = Regex.Split(searchString, "\\s");

var model = new List<MyTable>();
Boolean searchResult;
foreach (var record in myTableRepository.MyTable)
{
    searchResult = true;

    var recordTerms = record.title + " " + record.description + " " + record.poc;
    recordTerms = recordTerms.toLower();
    recordArray = Regex.Split(recordTerms, "\\s");

    foreach (var word in keywordArray)
    {
        if (!recordArray.asList.contains(word))
            searchResult = false;
        }
    }

    if (searchResult) {
        model.Add(new MyTable
        {
            id = record.id,
            title = record.title,
            description = record.description, 
            poc = record.poc
        });
    }
}
return View(model);
于 2013-05-17T00:52:13.333 に答える