2015-08-20 3 views
2

У меня есть таблица, в которой у меня есть столбец типа nvarchar. Таблица может расти, чтобы иметь довольно большое количество записей. Поиск может выполняться в этом конкретном столбце, так что для какой-либо записи в графическом интерфейсе реализована процедура хранения всех совпадений. В этой sp-логике, которая проверяет соответствие строк, используется LIKE% added_phrase% в этом конкретном столбце. Теперь, поскольку это может быть довольно неэффективным, я хотел использовать полнотекстовый поиск для этого конкретного столбца.Полнотекстовый поиск по одному столбцу в таблице

CREATE UNIQUE INDEX ui_MyId ON MyTable(Id); 
CREATE FULLTEXT CATALOG ft_mycatalog AS DEFAULT; 
CREATE FULLTEXT INDEX ON MyTable(MyColumn) 
KEY INDEX ui_MyId 
WITH STOPLIST = SYSTEM; 

Однако, когда я выполняю:

select * FROM MyTable 
WHERE CONTAINS(MyColumn, 'some_term') 

записи не возвращаются. Что я делаю неправильно? (То же самое и с LIKE, конечно, работает)

Id MyColumn 
1 12345some_termwsdjf4sd 
2 sdfsjdsfsdfsdfsdsome_term5dgd 
3 4l00lko0dfsdfsome_term 

Так он должен вернуть все 3 записи. Конечно, в этой таблице больше столбцов, но теперь они неактуальны.

+1

Не могли бы вы уточнить название столбца? («MyColumn» vs «Value») –

+0

Вы создали индекс по столбцу MyColumn и выполните поиск по столбцу. Значение – Backs

+0

А, это очерк, значение - это имя MyColumn, поэтому да: SELECT * FROM MyTable ГДЕ СОДЕРЖИТ (MyColumn, 'some_term') – bojanaborkovic

ответ

0

Насколько я знаю, «Содержит» возвращается только в том случае, если слова сопоставляются с определенным словом, которое поставляется в качестве ключа поиска - не согласовано частично. Однако вы можете заставить «Содержит», чтобы вернуть результат, который есть слова начали с определенным ключом поиска как в этом примере

select * FROM MyTable 
WHERE CONTAINS(MyColumn, '"some*"') 

Это даст вам результат, который есть слова начали с «некоторыми» в MyColumn. Вот Техно link

Мое предложение - использовать «как» вместо «Содержит».

+0

Да, лучше использовать LIKE или PATINDEX. Но получается, что большее количество сканирований, которые я обнаружил, что хранимая процедура выполняет, не обусловлена ​​той конкретной линией (с поиском LIKE), а скорее из-за некоторого эффективного объединения в нее. – bojanaborkovic

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