Делаем умный поиск c#

Самый легкий способ создать поиск по сайту это создать sql запрос с like к нужному полю таблички в бд. Такой запрос найдет только четкие совпадения по заданной подстроке. А что если хочется сделать поиск по подстроке в которой порядок слов не важен, то это нужно просто поделить подстроку на слова и сделать like к каждому слову. Так же иногда пишут запятые вместо точки или наоборот точки вместо запятых. Или вводят идентификатор, а не заголовок.

 

Давайте все это учтем и напишем следующий код:

// q - входная строка
string where = "";
string[] keywords = new Regex("\\s+").Replace(q, " ").Trim().Split(' ');
foreach (string keyword in keywords)
{
    if (!string.IsNullOrEmpty(where))
        where += " and ";
    string subWhere = "Title like '%" + Utils.SqlEscape(keyword) + "%'";
    // если ввели запятую
    if (keyword.IndexOf(",") != -1)
    {
        subWhere = subWhere + " or Title like '%" + Utils.SqlEscape(keyword.Replace(',', '.')) + "%'";
    }
    // если ввели точку
    else if (keyword.IndexOf(".") != -1)
    {
        subWhere = subWhere + " or Title like '%" + Utils.SqlEscape(keyword.Replace('.', ',')) + "%'";
    }
    // если слово может являться идентификатором
    if (new Regex(@"^\d+$").IsMatch(keyword))
    {
        subWhere = subWhere + " or Id = " + keyword;
    }
    where += "(" + subWhere + ")";
}
// составим запрос
string sql = "select * from Products where " + where + ";";
По теме:
Выполняем get запрос по расписанию c#

Напишем простенькую программу, которая будет выполнять get запрос по истечению определенного интервала времени. class Program { private static Timer _timer; Read more

Выполняем действие по расписанию (asp.net, c#)

Раньше я писал программку, которая выполняла get запрос по расписанию, но так же можно написать обычный HttpModule, который будет делать Read more

Выбираем технологии и инструменты для разработки веб приложений

1 Выбор и настройка инструментов для разработки фронтенда (только самые важные): 1.1 Twitter bootstrap — фреймворк позволяет писать качественную верстку Read more

Делаем водяной знак на картинке (c#, .net)

Нанесем несколько раз картинку watermark на другую картинку. public void DrawWatermark(string watermarkImagePath, System.Drawing.Image image) { using (System.Drawing.Image watermarkImage = System.Drawing.Image.FromFile(watermarkImagePath)) Read more

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *