#sql #sql-server-2008 #full-text-search #full-text-indexing
#sql #sql-server-2008 #полнотекстовый поиск #полнотекстовое индексирование
Вопрос:
Я пытаюсь заставить полнотекстовый поиск работать в SQL Server 2008 R2. Я работал с нашим администратором, и мы считаем, что у нас есть каталог с успешно настроенными индексами. Теперь я пытаюсь запросить индексированную таблицу, используя полнотекстовые функции
Это работает без проблем:
select *
from mPages
where contains(bodytext, ' "a dog" ')
Однако, когда я пытаюсь получить значения ранга с помощью containstable()
, я получаю сообщение об ошибке.
select mPages.bodytext, KEY_TBL.RANK
from mPages
INNER JOIN
CONTAINSTABLE(mPages, bodyText,
'dog') AS KEY_TBL
ON mPages.pageID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
Ошибка:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value 'About' to data type int.
Значение «About» находится в столбце с именем pagename
. Я не понимаю, как устранить эту ошибку.
Любая помощь?
Ответ №1:
Вероятно, он жалуется на эту строку:
ON mPages.pageID = KEY_TBL.[KEY]
Предполагая, что pageID
это int
, он попытается преобразовать key
в int
, чтобы можно было сравнить столбцы. Преобразование происходит не так, как планировалось.
Комментарии:
1. Я в замешательстве. Нет, где я сказал ему использовать
pagename
в качестве ключа. есть ли способ вручную установить ключ равнымpageID
?2. @quakkels: Проверьте свойство `TableFulltextKeyColumn` в вашем полнотекстовом индексе. Вы можете сделать это в SQL с помощью view
sys.fulltext_indexes
3. Я вижу столбец с именем,
unique_index_id
и его значение2
. Не уверен, что это значит.4. @quakkels: Вероятно, означает, что в качестве ключа используется второй столбец?
5. хммм … это было бы
pagename
вместоpageID
. Могу ли я просто обновить это представление до1
?