СОДЕРЖИТ в SQL 2000 - PullRequest
       7

СОДЕРЖИТ в SQL 2000

1 голос
/ 19 марта 2012

У меня есть таблица «Актив» со столбцом «AssetDescription».Каждый ряд содержит несколько слов / предложений, разделенных запятыми.

row1: - цветы, полноцветные, женские, Trend
row2: - пахнущие цветы, сердце

Теперь, если положить поисковый запрос, например: -

select * from Asset where contains(AssetDescription,'flower')

Ничего не возвращается.

У меня есть еще одна таблица 'SearchData' со столбцом 'SearchCol', имеющаяаналогичные строки, как указано выше в таблице «Актив».Теперь, если поставить поисковый запрос, например: -

select * from SearchData where contains(SearchCol,'flower')

Возвращает обе строки.

ВОПРОС: -

  1. Почему первый запрос нене возвращает никакого результата, но второй делает правильно.

  2. Если «Полнотекстовый поиск» как-то связан с 1-м заданием, то что делать с этим.Как я использую SQL Server 2000.

Ответы [ 4 ]

5 голосов
/ 19 марта 2012

CONTAINS требует индекса полнотекстового поиска и для включения индексации полнотекстового поиска.LIKE не требует полнотекстового поиска.

Преимущество использования CONTAINS перед LIKE состоит в том, что CONTAINS является более гибким и потенциально намного быстрее.LIKE может потребовать полного сканирования таблицы в зависимости от того, как вы его используете.

Из документов SQL Server

В отличие от полнотекстового поиска, транзакция LIKE TransactПредикат -SQL работает только с шаблонами символов.Кроме того, вы не можете использовать предикат LIKE для запроса отформатированных двоичных данных.Кроме того, LIKE-запрос к большому количеству неструктурированных текстовых данных намного медленнее, чем эквивалентный полнотекстовый запрос к тем же данным.LIKE-запрос к миллионам строк текстовых данных может занять минуты;тогда как полнотекстовый запрос может занять всего несколько секунд или меньше для тех же данных, в зависимости от количества возвращаемых строк.

4 голосов
/ 19 марта 2012

Ваш первый запрос ничего не соответствует, потому что вы не используете подстановочный знак.В ваших строках есть слово «цветы», а вы ищете строки, содержащие «цветок».Вам нужно изменить запрос на:

select * from asset where contains(AssetDescription, 'flower*')
0 голосов
/ 19 марта 2012

Предполагая, что SQL Server использует contains с префиксом слова, вы используете подстановочный знак.

Подробнее здесь: http://msdn.microsoft.com/en-us/library/ms187787.aspx

0 голосов
/ 19 марта 2012

Попробуйте перестроить свой полнотекстовый индекс. Возможно, он устарел и, следовательно, не находит их при использовании CONTAINS.

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