Заказ с Union Freetext и содержит - PullRequest
0 голосов
/ 19 ноября 2011

Я хочу выполнить поиск с помощью оператора CONTAINS (чтобы выбрать строки, которые точно соответствуют), а также выполнить поиск с помощью FREETEXT, чтобы сопоставить отдельные слова в поисковой фразе.

Основная цель - order результаты таким образом, что точные совпадения являются первыми .

Вот пример кода, который я пробовал, но результаты получают doubled :

SELECT TOP 100
       TreeID AS ObjectID,
       PageTitle AS Title,
       SUBSTRING(PlainPageContent, 1, 256) AS [Description],
       1 AS Priority
FROM TreeTexts 
WHERE FREETEXT((PlainPageContent, MenuTitle, PageTitle, WindowTitle), @SearchWord)
  AND LanguageID = @LangID

UNION

SELECT TOP 100
       TreeID AS ObjectID,
       PageTitle AS Title,
       SUBSTRING(PlainPageContent, 1, 256) AS [Description],
       0 AS Priority
FROM TreeTexts 
WHERE CONTAINS((PlainPageContent, MenuTitle, PageTitle, WindowTitle), '"'+@SearchWord+'"')
  AND LanguageID = @LangID

ORDER BY Priority

Возможно, это не лучшая команда выбора для того, что мне нужно, поэтому не могли бы вы привести меня на правильный путь.

Спасибо

1 Ответ

0 голосов
/ 20 ноября 2011

Вы можете удалить дубликаты из результата.Это будет длинный запрос, но здесь я дал ему шанс:

Delete  T1 From Table1 as T1 INNER JOIN Table1 as T2 ON 
T1.Field1=T2.Field1 And T1.ID < T2.ID

Другие способы сделать это:

Или вы можете выбрать отдельные поля из набора результатов.

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