SQL Fuzzy Matching

Надеюсь, я не повторяю этот вопрос. Я сделал поиск здесь и Google, прежде чем размещать здесь.

Я работаю в электронном магазине с SQL Server 2008R2 с включенным полным текстом.

Мои требования,Существует таблица продуктов с названием продукта, OEM-кодами, моделью, в которую входит этот продукт. Все в тексте.Я создал новый столбец с именем TextSearch. Это объединяет значения «Наименование продукта», «Код производителя» и «Модель», в которые входит данный продукт. Эти значения разделяются запятыми.Когда клиент вводит ключевое слово, мы запускаем поиск по столбцу TextSearch, чтобы найти продукты. Смотрите соответствующую логику ниже.

Я использую Hybrid Fulltext и обычно люблю делать поиск. Это дает более релевантные результаты. Все запросы, выполненные во временную таблицу и отличия были возвращены.

Соответствующая логика,

Запустите следующий SQL, чтобы получить соответствующий продукт, используя полный текст. Но @Keywords будет предварительно обработан. Сказать 'CLC 2200 ' будет изменен наCLC * AND 2200 * '

ВЫБЕРИТЕ Id ИЗ dbo.Product, ГДЕ СОДЕРЖИТ (TextSearch, @ Ключевые слова)

Другой запрос будет выполняться с использованием обычного лайка. Так 'CLC 2200 ' будет предварительно обработан доTextSearch как% clc% И TextSearch как% 2200% ', Это просто потому, что полнотекстовый поиск не будет искать шаблоны перед ключевыми словами. Например, он не вернетсяpclc 2200 '.

ВЫБЕРИТЕ Id ИЗ dbo.Product ГДЕ TextSearch like '% CLC%» И TextSearch, как '% 2200%»

Если шаг 1 и 2 не сделалиt вернуть любые записи, будет выполнен следующий поиск. Значение 135 было точно настроено мной для получения более релевантных записей.

ВЫБЕРИТЕ p.id ИЗ dbo.Product В КАЧЕСТВЕ ВНУТРЕННЕГО СОЕДИНЕНИЯ FREETEXTTABLE (product, TextSearch, @ Keywords) AS r ON p.Id = r. [КЛЮЧ] ГДЕ r.RANK> 135

Все вышеперечисленное прекрасно работает с разумной скоростью и возвращает релевантные продукты по ключевым словам.

Но я ищу дальнейшее улучшение, когда продукт вообще не найден.

Скажи, если клиент ищет "CLC 2200npk ' и этот продукт не былтам, я должен был показать следующий очень близкоCLC 2200 '.

Пока я пытался использоватьСаундэкс () функция. Купить вычисление значения soundex для каждого слова в столбце TextSearch и сравнение со значением soudex для ключевого слова. Но это возвращает слишком много записей и тоже медленно.

пример, 'CLC 2200npk ' вернет продукты, такие какCLC 1100 ' и т.д. Но это нене будет хорошим результатом. Как это не близко к CLC 2200npk

Есть еще один хорошийВот, но это использует функции CLR. Но я не могу установить функции CLR на сервере.

Так что моя логика должна быть,

если 'CLC 2200npk ' не найден, показать рядомCLC 2200 ' если 'CLC 2200 ' не найден, показать рядомCLC 1100 '

ВопросыВозможно ли совпадение как предложено?Если бы мне нужно было исправить орфографию и поиск, что было бы хорошим способом? Все наши списки продуктов на английском языке.Есть ли UDF или SP 's, чтобы соответствовать текстам как мои предложения?

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос