У нас есть таблица с несколькими полнотекстовыми индексированными полями. Скажем, это firstName, surName и lastName. Я ищу «Джона и Смита», и, очевидно, эти два слова, скорее всего, будут написаны в разных областях. Запрос ничего не возвращает. Если я ищу «Джон ИЛИ Смит», он работает.
Вопрос в том, могу ли я как-то сказать SQL Server, что все поля, принадлежащие одной строке конкретной таблицы, должны рассматриваться как один непрерывный фрагмент текста?
Конечно, я могу связать поля вручную со специальным полем и индексировать его, но это выглядит довольно глупо.
На всякий случай запрос. Дело не в имени человека, но идея та же:
SELECT [id], [type], [accessClass], [rank]
FROM (
SELECT DISTINCT temp_result.*
FROM (
select SDF_Article.article_id [id],
6 [type], SDF_Object.accessClass [accessClass], RelevanceTable.[rank] [rank]
from SDF_Article inner join SDF_Object SDF_Object
on SDF_Article.article_id=SDF_Object.object_id
inner join SDF_Article_Locale SDF_Article_Locale
on SDF_Article.article_id=SDF_Article_Locale.article
inner join ContainsTable(SDF_Article_Locale, (title, body, brief),
'FORMSOF (INFLECTIONAL, hello) AND FORMSOF (INFLECTIONAL, world)', Language 'Russian') RelevanceTable
on SDF_Article_Locale.entry_id=RelevanceTable.[KEY]
) AS temp_result
INNER JOIN SDF_RelationMap SDF_Map
ON temp_result.[id] = SDF_Map.object AND SDF_Map.ancestor = 5 )
AS result ORDER BY [rank] desc
Мы используем SQL Server 2005.