Способы поиска одного символа с последующим дефисом и последующим текстом с использованием полнотекстового поиска на сервере SQL - PullRequest
0 голосов
/ 25 октября 2011

У нас есть данные, которые могут выглядеть примерно так:

A-10001
A-10002
A-10003
B-10001
B-10002
B-10003

И где мы хотели бы найти все совпадения, содержащие «A-100».Используя полнотекстовый поиск, мы делаем что-то вроде:

where contains(e.*, '"A-100*"')

Тем не менее, поскольку "-" считается границей разбиения по словам, а A - слово-шум (так как это один символ), запрос выполняетне вернуть никаких результатов.Мне интересно, есть ли какой-нибудь (простой) способ вернуть ожидаемые результаты.

Обратите внимание, я понимаю, что в этом упрощенном сценарии я мог бы использовать вместо "содержит" что-то вроде:

where 
  (e.myColumn1 like '%A-100%' 
   or e.myColumn2 like '%A-100%' 
   or e.myColumn3 like '%A-100%', 
   etc)

Но в моей ситуации это не сработает (в основном из-за соображений производительности и из-за большого количества столбцов, на которые мне нужно взглянуть).

Я также понимаю, что могу разбить строку поиска на двеслова, и сделать что-то вроде:

where 
  contains(e.*, '"100*"') 
  and (e.myColumn1 like '%A-100%' 
       or e.myColumn2 like '%A-100%' 
       or e.myColumn3 like '%A-100%', 
       etc)

Но опять же, поскольку есть много столбцов, это не идеальное решение.

Я заинтересован в решении для SQL Server 2005 ипозже, но если есть решение для SQL Server 2008, меня это тоже заинтересует.

Спасибо за любую помощь, Эрик

1 Ответ

1 голос
/ 25 октября 2011

Я не думаю, что вы найдете очень чистое решение для этого.Возможно, я упрощаю проблему, но мой совет - это производный (вычисляемый) столбец первых 2 символов.Если ваш приоритет - производительность чтения, поместите некластеризованный столбец в вычисляемый и включите полный столбец.Это позволило бы искать 'A-', тогда как like всегда требует сканирования.Даже если у вас есть несколько столбцов для оценки, для каждого столбца это должно работать лучше, чем предикат like.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...