Я пытаюсь реализовать полную функциональность поиска на моем веб-сайте ASP.NET MVC (C #, Linq-to-Sql).
Сайт состоит из 3-4 таблиц, в которых есть 1-2 столбца, которые я хочу найти.
Это то, что я имею до сих пор:
public List<SearchResult> Search(string Keywords)
{
string[] split = Keywords.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
List<SearchResult> ret = new List<SearchResult>();
foreach (string s in split)
{
IEnumerable<BlogPost> results = db.BlogPosts.Where(x => x.Text.Contains(s) || x.Title.Contains(s));
foreach (BlogPost p in results)
{
if (ret.Exists(x => x.PostID == p.PostID))
continue;
ret.Add(new SearchResult
{
PostTitle= p.Title,
BlogPostID = p.BlogPostID,
Text=p.Text
});
}
}
return ret;
}
Как видите, у меня есть foreach для ключевых слов и внутренний foreach, который работает над таблицей (я бы повторил это для каждой таблицы).
Это кажется неэффективным, и я хотел знать, есть ли лучший способ создать метод поиска для базы данных.
Кроме того, что я могу сделать со столбцами в базе данных, чтобы их можно было искать быстрее? Я что-то читал об их индексации, это просто поле «Полнотекстовая индексация» True / False, которое я вижу в SQL Management Studio?