Лучшие практики для создания поискового приложения?
Я скоро начну простой проект поиска и поиска данных. По сути, одна из них «помещает мою огромную электронную таблицу Excel в базу данных, создает для нее веб-интерфейс и делает ее доступной для поиска».
Одна вещь, которая меня беспокоила, это реальная логика поиска, которая будет использоваться, когда пользователь вводит некоторые критерии. Я представляю интерфейс поиска с текстовым полем и несколько других инструментов фильтрации - выпадающие списки и флажки и тому подобное.
Хотя это дает мне очень сильный, детальный контроль над фильтрацией, которую я могу выполнить, мне интересно, что думают SO о фактическом выполнении поиска. Здесь я буду использовать ASP.NET, MS SQL Server и Linq-To-SQL, так что помните об этих технологиях.
Наверху, я думаю, я бы сделал что-то вроде:
var results = from s in db.Stuff
where (s.Prop1.Contains(textFilter) ||
s.Prop2.Contains(textFilter) ||
s.Prop3.Contains(textFilter)) &&
checkbox1.IsChecked ?
s.Prop4.ToLower().Equals(combobox1.Text) : true
select s;
Вот что я знаю:
Как сделать группировку и присоединиться при необходимостиЯ могу использоватьСодержит() метод по отдельным свойствам для генерации SQLЛЮБИТЬ запросыЯ могу фильтровать вещи свойство за свойством, построив свою логику поиска, как указано выше.Вот что я спрашиваю:
Есть ли способ поиска по всем свойствам (без вытягивания всех объектов в память - я предполагаю, что это означает создание списка свойств каждого объекта с отражением, их упорядочение и последующую проверку)? Если нет, то это кажется невероятно громоздким, так как мне пришлось бы создавать новую логику для каждого нового свойства, которое я мог бы добавить. Что-то вродеs.Contains (TextFilter) в вышесказанном было бы идеально.Как работает SQLЛЮБИТЬ запрос на самом деле работает? Это то, что я хочу сделать?Существует ли стандартный способ реализации правил поиска, таких как строки в кавычках, для полных и логических операторов, таких какА ТАКЖЕ а такжеИЛИ ЖЕ? Я был бы удивлен, если бы каждое приложение, которое их реализовало, делало это с помощью собственной логики синтаксического анализа.Я лаю не на том дереве? Я что-то пропустил?