0

Есть ли способ повысить отказоустойчивость функции SQL SOUNDEX при использовании для сопоставления нечеткой строки? Я использую это для поиска имен поставщиков. Что у меня есть:Повысить отказоустойчивость для SQL Soundex для соответствия нечеткой строки

WHERE 
    SOUNDEX(@SearchTerm) = SOUNDEX(s.Name) 

Это работает в некоторой степени, но я хочу немного увеличить отказоустойчивость. Например:

SOUNDEX('test') = T230 
SOUNDEX('tet') = T300 
SOUNDEX('tets') = T320 
SOUNDEX('tes') = T200 

В идеале, я хотел бы, чтобы все эти примеры совпадали. Кроме того, небольшая проблема, когда имя поставщика состоит из 2-х слов и запросов пользователей по второму слову, это будет очевидно работать, так как походный зависит от первой буквы слова:

SOUNDEX('test supplier') = T230 
SOUNDEX('supplier') = S146 

Первоначально я использовал библиотеку сравнения нечетких строк в веб-приложении, которая использовала различные приближенные алгоритмы сравнения строк, но получается, что, когда 20 пользователей одновременно ищут для 5000+ поставщиков, для веб-сервера это слишком сложно. Теперь я пытаюсь сделать это в хранимой процедуре, чтобы база данных возвращала только результаты поиска, а не полный список поставщиков для поиска.

ответ

1

Вы можете реализовать UDF и развернуть его на сервере с помощью SQL CLR integration. (Более spceifically: CLR Scalar-Valued Functions)

Я могу заверить, что это работает, потому что я делаю то же самое и просматриваю более 350 000 строк (без какого-либо другого фильтра), и он работает очень быстро. Это вариация алгоритма Damerau-Leventshein, и это требует много времени.

Разница между возвратом всех строк в приложение и фильтрацией его на стороне приложения и фильтрацией непосредственно внутри SQL Server огромна.