Запросы Freetext в SQL Server 2008 не сопоставление фразу

StackOverflow https://stackoverflow.com/questions/4462875

  •  11-10-2019
  •  | 
  •  

Вопрос

У меня есть полная таблица индексированной текста в SQL Server 2008, которую я пытаюсь запросить точное соответствие фразы с использованием полного текста. Я не верю, что использование содержит или подобно подходит для этого, потому что в других случаях запрос может быть не точным (пользователь не окружает фразу в двойных цитатах), и в целом я хочу гибкости Freetext.

Согласно документацияMsdn] для Freetext:

Если freetext_string заключается в двойных кавычках, вместо этого выполняется матч фразы; Stemming и тезаурус не выполняются.

что заставит меня поверить в такой запрос:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')  

Вернут только результаты, когда термин «мэрия» появляется в поле описания, но вместо этого я получаю такие результаты, как это:

1 Дизайн пандуса гандикапа в Manning Hall.
2 Расследование антенны. Клиент: City of Cranston Engineering Dept.
3 Структурное расследование в отношении повреждения пожара Международному теннисному Залу славы.
4 Расследование расследование крыши для предлагаемого спутникового дизайна в Herald Hall.
... так далее

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

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'  

1 Основной экстерьер и внутренний ремонт существующей мэрии для Куинси Массачусетс
2 Корментное структурное расследование башни Ратуши Паутакета, страдающая утечками.

Я уверен, что это случай, когда я не понимаю документацию, но есть ли способ достичь того, что я ищу? А именно, чтобы иметь возможность пройти в строку поиска без кавычек и получить именно то, что я получаю сейчас, или с кавычками и получить только эту точную фразу?

Это было полезно?

Решение

Как ты сказал, FREETEXT Смотрите каждое слово в вашей фразе, а не фразу как все. Для этого вам нужно использовать CONTAINS утверждение. Как это:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

Если вы хотите получить ранг результатов, вы должны использовать CONTAINSTABLE. Анкет Он работает примерно одинаково, но возвращает таблицу с двумя столбцами: [Key] Wich содержит основной ключ таблицы поиска и [Rank], что дает вам ранг результата.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top