У меня есть веб-приложение asp.net, которому нужна страница поиска, которая ищет данные в определенной таблице (SQL). На сегодняшний день она имеет только простой запрос LIKE, использующий параметризованный sql:
SqlParameter[] param = new SqlParameter[1];
param[0] = new SqlParameter("@searchText", SqlDbType.VarChar);
param[0].Value = "%" + text + "%";
using (SqlDataReader dr = SqlHelper.ExecuteReader(this.ConnectionString, CommandType.StoredProcedure, "isp_Search", param))
{
//Do something
}
Теперь мне нужно добавить возможность использовать логические операторы для поиска.
Таким образом, в текстовом поле пользователь может искать такие вещи, как
Adam OR Adams
James AND NOT Jame
Douglas AND (Adam OR Adams)
Добавление полнотекстового индексирования в таблицу не является предпочтительным вариантом, поскольку я не контролирую модель данных.
Я ищу метод интерпретации текстовых запросов и преобразования их в SQL-запрос с соответствующим количеством SqlParams.
searchexpression = "Douglas AND (Adam OR Adams)"
MakeSearchQuery(searchexpression, out sqlquery, out SqlParam[] params)
Возвращает что-то вроде
sqlquery = "SELECT someFields FROM table WHERE someField=@Param1 AND (someField=@Param2 OR someField=@Param3)"
И sqlParams вроде
sqlParam[0] = 'Douglas'
sqlParam[1] = 'Adam'
sqlParam[2] = 'Adams'
Должен же быть кто-то, кто уже делал что-то подобное? Я искал и на SO, и в Google без какого-либо реального успеха. И указатели на открытый/бесплатный код или хорошую идею о том, как преобразовать поисковое выражение в SQL, приветствуются.