простое совпадение текстов алогрита для использования в хранимой процедуре - PullRequest
0 голосов
/ 11 июня 2009

У меня есть таблица с двумя полями в базе данных сервера SQL, и мое приложение asp.net вызывает хранимую процедуру с параметром '@SearchString', и эта хранимая процедура находит все записи, в которых значение @Searchstring найдено в конкатенации два поля в таблице, назовите их «Field1» и «Field2»

Итак, логика выглядит следующим образом (я упростил реальный запрос):

CREATE PROCEDURE [dbo].[sp_FindMatches] @SearchString varchar(30)
AS
  SELECT * FROM Table1 WHERE Field1+Field2 LIKE @SearchString

Я хотел бы улучшить этот довольно простой алгоритм сопоставления, чтобы он не был настолько ограничивающим в записях, с которыми он сопоставляется. Например, если пользователь вводит «DOG HOUSE» в качестве параметра, довольно простая логика в существующем SP будет возвращать записи, где он находит точную строку. Я хотел бы, чтобы он также возвращал записи только с "DOG" и "HOUSE", даже если строки не совсем рядом друг с другом.

Еще лучше, если бы был способ ранжировать записи с точки зрения «лучшего соответствия», было бы еще лучше, то есть, если «DOG HOUSE» найден, это точное совпадение, если «DOG» и «HOUSE» найдено, второе лучшее совпадение, если "собака, но не" дом "или" дом ", но не" собака ", третье место и т. д.

Есть ли общий алгоритм, который делает многое из того, что я хочу?

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Вы должны посмотреть на полнотекстовый поиск. Он специально разработан для того, чтобы делать именно то, что вы просите, и делает это очень хорошо.

То, как вы реализовали это с использованием традиционного TSQL, сделает любые индексы для затронутых столбцов совершенно непригодными.

И не пугайтесь полнотекстового поиска - это удивительно просто настроить.

0 голосов
/ 11 июня 2009

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

...