none
CONTAINS возвращает меньшее количество строк чем LIKE RRS feed

  • Общие обсуждения

  • Здравствуйте! Есть вьюшка, одно из полей которой содержит значения типа nvarchar(3000). И вот по этому полю пытаюсь осуществить полнотекстовый поиск при помощи CONTAINS, однако по какой-то причине возвращаются не все строки, проходящие по условию (на мой, человеческий взгляд). Когда пытаюсь тот же поиск осуществить при помощи LIKE, возвращается гораздо большее количество строк (думаю, что именно все). С чем это может быть связано?

    Для наглядности вот две строки:

    Русское православие в имперском контексте: конфликты и противоречия / Модели и константы в русской истории и современности (материалы конференции)

    и

    О стажировке в имперском колледже науки и техники Лондонского университета (Великобритания)

    Поиск осуществляю по слову имперском.

    При поиске с помощью CONTAINS возвращается только первая (... where contains(text, '"*имперском*"')), при поиске с LIKE — обе (... where text like '%имперском%').

    Буду очень благодарен за помощь.

    3 июня 2014 г. 11:35

Все ответы

  • А звездочки в команде зачем, тем более две? Ну последняя звездочка допустим призвана означать prefix_term (зачем в данном случае?), а первой так вообше нет в команде.

    http://msdn.microsoft.com/en-us/library/ms187787.aspx 

    Попробуйте так:

    (... where contains(text, '"имперском"'))

    Ну и, конечно full text дожен быть...


    This posting is provided "AS IS" with no warranties, and confers no rights.

    3 июня 2014 г. 15:58
    Модератор
  • Неа, ни фига не ищется... Думаю, может быть дело в том, что версия 2005, потому что пробовал на 2012 — находятся все строки (как с LIKE). Он же вроде бы тогда и появился, этот поиск полнотекстовый, следовательно очень возможно что это — следствие одной из недоработок, которые исправили впоследствии. Но спасибо за ответ, Илья! Что касается синтаксиса — как только не пробовал (со звездочками, без звездочек, с одной стороны, с другой) — все без толку. Если честно, он для меня вообще новый оператор (функция то есть, наверное, или как там - предикат, да?...), этот CONTAINS, и ассоциируется прежде всего с LIKE, потому по аналогии две звездочки и поставил с обеих сторон.
  • В общем, дело, судя по всему, было в том, что не были пересчитаны полнотекстовые индексы (то, что repopulate называется). Сейчас сделал это — и все теперь находится как полагается. Ну почти как полагается. Попробовал на другом образце — LIKE все-таки больше возвращает, чем CONTAINS.