У меня есть веб-приложение 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.