Функция SQL CONTAINS() не возвращает ожидаемые результаты?

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

ряд 1: - цветы, полноцветные, женские, Тренд

row2:- детка, нюхающая цветы, сердечко

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

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

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

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

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

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

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

ВОПРОС:-

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

Устранение сомнения в комментарии к моему вопросу:-

  1. Таблица «SearchData» содержит более 100 000 строк, как и таблица «Актив».

  2. Эти две таблицы НЕ идентичны. Но в соответствующих столбцах есть строки, содержащие некоторую группу слов, разделенных запятыми. (Таким образом, цветы, цветы и т. д. и т. д. в изобилии представлены в обеих этих колонках.)

Скриншот индексов обеих таблиц (Asset и SearchData):- введите здесь описание изображения


person Kings    schedule 21.03.2012    source источник
comment
Каковы типы столбцов AssertDescription и SearchCol?   -  person barsju    schedule 21.03.2012
comment
и если вы используете содержит (..., 'цветы') или содержит (..., 'цветок *'), каковы результаты?   -  person Phil    schedule 21.03.2012
comment
и если вы используете содержит (..., 'цветы') или содержит (..., 'цветок *'), каковы результаты? --› результаты НИЧЕГО (ноль строк)   -  person Kings    schedule 21.03.2012
comment
Вы можете попробовать contains(... 'flower*') с одинарными и двойными кавычками?   -  person Phil    schedule 21.03.2012


Ответы (3)


это, вероятно, как-то связано с вашей конфигурацией полнотекстового индекса. Можете ли вы опубликовать некоторую информацию о вашем указателе и каталоге?

person Diego    schedule 21.03.2012
comment
привет, я не вижу ничего, связанного с полным текстом на скриншоте. Вы не можете использовать предикат CONTAINS или FREETEXT для таблицы, не проиндексированной в полнотекстовом режиме. - person Diego; 21.03.2012
comment
Я понимаю твою точку зрения. Но поисковый запрос в таблице «SearchData» успешно дает результаты. Итак, как это возможно. Есть ли способ проверить, в какой таблице/столбце включен «полнотекстовый поиск». - person Kings; 21.03.2012
comment
ну, я предположил, что в этой таблице есть полный текстовый указатель, иначе я был бы очень удивлен. Я не знаю на 2000, но на 2005 вы можете проверить в хранилище -> полные текстовые каталоги, и тогда каждый каталог покажет вам таблицы, которые его используют - person Diego; 21.03.2012
comment
ДИЕГО - пожалуйста, проверьте обновленные снимки экрана. И скажи мне, что не так. - person Kings; 21.03.2012
comment
ваше отслеживание изменений отключено для активов. Это означает, что индекс был создан, но не обновляется, как таблица. Вы должны повторно заполнить свой индекс. Взгляните на это: technet.microsoft.com/en-us/library/ ms142575.aspx - person Diego; 21.03.2012
comment
понял. я включил эти два отключенных атрибута. И, наконец, это дало мне ожидаемые результаты. Но Диего, пожалуйста, дай мне знать, если их включение вызовет какой-либо неблагоприятный эффект. - person Kings; 21.03.2012
comment
единственные эффекты, которые вы могли бы получить, связаны с населением, которое представляет собой процесс обновления вашего каталога на основе вашей таблицы. Рад, что помог, не забудьте отметить как ответ. - person Diego; 21.03.2012

Если вы прочитаете статью о СОДЕРЖИТ, вы увидите, что при поиске

  • содержит (AssetDescription, 'цветок')

"цветок" рассматривается как простой термин, который

соответствует точному слову или фразе

Однако для

  • содержит (AssetDescription, 'цветок *')

"цветок" рассматривается как префикс термина, который

указывает совпадение слов или фраз, начинающихся с указанного текста

и будет соответствовать «цветам» в ваших данных.

Итак, вы уверены, что данные в ваших двух таблицах одинаковы, или «Актив» содержит «цветы», а «SearchData» содержит «цветок»?

person Phil    schedule 21.03.2012
comment
Если я правильно понимаю OP, он говорит, что поиск двух идентичных таблиц с двумя одинаковыми запросами дает разные результаты. Это два разных запроса, поэтому я сомневаюсь, что это то, что нужно OP. - person Lieven Keersmaekers; 21.03.2012
comment
Да, но если две таблицы содержат одни и те же данные и имеют одинаковые полнотекстовые индексы, то один и тот же запрос должен давать одинаковые результаты. Так что либо данные разные, либо таблицы как-то иначе индексируются, либо запрос другой. - person Phil; 21.03.2012
comment
offcourse, но OP показал запросы, так что их можно стереть. Мы должны поверить ему на слово, что таблицы одинаковы (я бы предпочел, чтобы это было как-то доказано), так что все, что осталось, каким-то образом индексируется по-другому. - person Lieven Keersmaekers; 21.03.2012
comment
OP должен показывать нам определения и индексы таблиц. Еще лучше, если бы он мог предоставить пример сценария, демонстрирующий проблему. - person Lieven Keersmaekers; 21.03.2012
comment
@ ФИЛ и ЛИВЕН: - пожалуйста, ознакомьтесь с моим объяснением сомнений, которые у вас возникают по моему вопросу. надеюсь, это поможет - person Kings; 21.03.2012
comment
Если возможно, здесь, на этом веб-сайте, я хотел бы предоставить скриншоты проблемы. Меня это действительно беспокоит. - person Kings; 21.03.2012
comment
@Lieven - дайте мне знать, если вам нужны подробности об индексации - person Kings; 21.03.2012
comment
@Kings - К вашему вопросу можно прикрепить изображение. Просто сохраните его куда-нибудь на диск и используйте кнопку загрузки изображения при редактировании вопроса. - person Lieven Keersmaekers; 21.03.2012
comment
@Пожалуйста, проверьте скриншот... или требуется что-то еще? - person Kings; 21.03.2012

РЕШЕНИЕ ПОНЯЛОСЬ.

СПАСИБО ВСЕМ и особенно ДИЕГО за поддержку.

Чтобы обеспечить правильную работу ПОЛНОТЕКСТОВОГО ПОИСКА (FTS):-

  1. Включите FTS для нужной таблицы.
  2. Включите FTS для необходимого столбца в этой таблице.
  3. Откройте свойства той же таблицы и проверьте, включены ли атрибуты «Полнотекстовое отслеживание изменений» и «Полнотекстовый индекс обновления». Если нет, включите их.

ГОТОВО. :)

person Kings    schedule 21.03.2012
comment
это именно то, что я сказал в своих комментариях. Вы должны отметить это как ответ. - person Diego; 21.03.2012