2009-06-11 1 views
0

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

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

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

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

Еще лучше, если бы был способ ранжировать записи с точки зрения «лучшего соответствия», это было бы еще лучше, т.е. если «DOG HOUSE» найден, это точное совпадение, если «СОБАКА» и «ДОМ» найдены, второй лучший матч, если «собака, но не„дом“или„дом“, но не„собака“третий лучший и т.д.

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

ответ

2

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

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

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

0

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

Смежные вопросы