Нужен совет для построения поиска в приложении ASP.NET MVC - PullRequest
1 голос
/ 02 декабря 2009

Я гуглял, но не нашел никакой хорошей информации о построении хорошей функции поиска в проекте ASP.NET MVC.

Вдобавок ко всему, функция поиска для поиска авторов и книг будет выглядеть следующим образом:

char[] delimiterChars = { ' ', ','};
string[] searchterms = SearchBox.Split(delimiterChars);
IQueryable<SearchResult> SR = _db.Books.Where(e => 
    (e.Title.Contains(SearchTerm[0]) || e.Author.Name.Contains(SearchTerm[0]))
    && (e.Title.Contains(SearchTerm[1]) || e.Author.Name.Contains(SearchTerm[1]))
    //&& repeat for as many words were entered in the search box
    )
      .Select(e => new SearchResult
      {
          Title = e.Title,
          Type = "Book",
          Link = "Book/" + e.BookID
      });

Вопросы * * 1006 Есть ли лучший способ сделать это? Если нет, как я могу динамически создать свой SQL-запрос, чтобы найти столько поисковых терминов, сколько было введено? Можно ли добавить результаты поиска из второго поиска в переменную SR? Другие соображения

В поиске выше я ищу результаты, которые соответствуют Книге или Автору. Может быть, сразу после того, как я хочу выполнить поиск, просто ища совпадение в таблице «Автор», а затем добавлю эти результаты к результатам переменной SR из первого запроса. Я не знаю, является ли это наиболее практичным подходом, но можно ли это сделать?

1 Ответ

0 голосов
/ 02 декабря 2009

Моим первым желанием было бы переложить это на что-то вроде Lucene.Net. Если не считать этого, вы можете сделать это:

char[] delimiterChars = { ' ', ','};
string[] searchterms = SearchBox.Split(delimiterChars);

var temp = _db.Books.AsQueryable();
foreach (string term in searchterms)
{ 
  temp = temp.Where(e => 
    (e.Title.Contains(term) || e.Author.Name.Contains(term));
}

IQueryable<SearchResult> results = temp.Select(e => new SearchResult
{
  Title = e.Title,
  Type = "Book",
  Link = "Book/" + e.BookID
});

Обратите внимание на foreach, который динамически создает запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...