JPais Ответов: 2

Какова наилучшая практика поиска строки в SQL server с большими данными


Всем привет

Я хотел бы знать, что может быть лучшей практикой для поиска ключевых слов или предложений в sql server.

Предположим, у меня есть таблица продуктов с названием, описанием и ключевыми словами. У меня есть функция поиска на моем сайте, где пользователь может ввести что угодно (предложение или одно слово).
Я запрашиваю столбцы таблицы продуктов с помощью предложения like и сокращаю список до строк, содержащих критерии поиска.
Чтобы сократить время отклика в случае большого объема данных в таблице product, я добавляю запрос на разбиение на страницы 10.
Является ли описанный выше сценарий хорошей практикой?

Заранее спасибо

Что я уже пробовал:

Мой текущий запрос

выбрать * из (выбрать срно как кодтовара, имя +' '+ описания +' '+ ключевые слова, как поиск
из ProductDetails) PD
где PD.поиск вида like '%спать%' или PD.поиск вида like '%листов%'

Здесь я объединил три столбца, а именно имя, описание и ключевые слова, и ищу "постельное белье" в своей таблице продуктов

структура таблицы

Пример ProductDetails
srno|имя|описание / Ключевые слова
1|цветочный кровать листов|..текст..|постельное белье
2 / квадратные наволочки| .. какой-то текст.. / наволочки квадратные

Правильно ли размещать ключевые слова в отдельном столбце или мне следует создать новую таблицу для ключевых слов?
Если мне нужно создать новую таблицу для ключевых слов, как изменить приведенный выше запрос?

an0ther1

Привет JPais,

Разбиение на страницы не поможет - необходимо идентифицировать полный результирующий набор, а затем вернуть первое число записей " x " (в вашем случае 10). Это уменьшает результирующий набор, передаваемый клиенту, но не ускоряет ваш запрос.
Кроме того, индексация не поможет, потому что вы используете %search term%. SQL может использовать текст до первого подстановочного знака для идентификации результирующего набора, но это все.
Однако есть несколько вариантов;
а) внедрите категории в свою таблицу продуктов - это поможет ограничить ваши результаты.
б) реализовать полнотекстовый поиск - это, пожалуй, лучший вариант
в) создайте таблицу поиска, содержащую поисковые слова - это в основном повторное создание полнотекстового поиска вручную, и я бы не рекомендовал этого делать.

с уважением

JPais

Спасибо за ваш ответ.. может U пожалуйста, помогите мне с третьим вариантом. На самом деле я использую общий сервер, и iy не позволяет мне настроить полнотекстовый сервер. Так что можете ли вы, пожалуйста, провести меня через ваш третий вариант?
Также будет ли "like query", как тот, что в моем запросе, замедлять процесс поиска?

2 Ответов

Рейтинг:
2

gregorio89

Я использовал ваше второе решение для подобных проблем.
Вы можете добавить индекс к полям, содержащим искомое слово, и сделать это :

выберите срно как кодтовара, имя +' '+ описания +' '+ ключевые слова, как поиск
из ProductDetails как PD
где PD.поиск вида like '%спать%' или PD.поиск вида like '%листов%'

но я предлагаю вам, если это возможно, использовать только подобное таким образом

выберите срно как кодтовара, имя +' '+ описания +' '+ ключевые слова, как поиск
из ProductDetails
где PD.поиск как 'кровать%' или PD.поиск как листы%'

таким образом вы не потеряете свой индекс


JPais

Можно ли добиться полнотекстового поиска ручным методом, то есть создать ручную систему индексации с использованием таблиц и запросов к ним? Можете ли вы направлять меня своим примером? Спасибо

Рейтинг:
1

NaibedyaKar

Я чувствую, что вы показываете go для полнотекстовой индексации.

Подробнее читайте здесь Понимание полнотекстовой индексации в SQL Server-простой разговор[^].

Кроме того, вы можете реализовать алгоритм нечеткого поиска для приблизительного сопоставления строк.