У меня есть полнотекстовая индексированная таблица в SQL Server 2008, которую я пытаюсь запросить для точного совпадения фраз, используя FULLTEXT. Я не считаю, что использование CONTAINS или LIKE подходит для этого, потому что в других случаях запрос может быть неточным (пользователь не заключает фразу в двойные кавычки), и в целом я хочу гибкости FREETEXT.
Согласно документации [MSDN] для FREETEXT:
Если строка freetext_string заключена в двойные кавычки, вместо этого выполняется совпадение фраз; стемминг и тезаурус не выполняются.
что заставило бы меня поверить в такой запрос:
SELECT Description
FROM Projects
WHERE FREETEXT(Description, '"City Hall"')
будет возвращать результаты только в том случае, если в поле «Описание» появляется термин «Мэрия», но вместо этого я получаю такие результаты:
1 Проект пандуса для инвалидов в Manning Hall.
2 Исследование антенны. Заказчик: Инженерный отдел города Крэнстон.
3 Исследование конструкции в связи с ущербом, нанесенным пожаром Международному залу теннисной славы.
4 Исследование Исследование крыши для предлагаемого проекта спутника в Herald Hall.
... и т. д.
Очевидно, что эти результаты включают по крайней мере одно из слов в моей фразе, но не саму фразу. Что еще хуже, я думал, что результаты будут ранжированы, но два результата, которые я действительно хотел (потому что они включают фактическую фразу), были похоронены.
SELECT Description
FROM Projects
WHERE Description LIKE '%City Hall%'
1 Капитальный внешний и внутренний ремонт существующей ратуши в Куинси, штат Массачусетс
2 Беглое структурное исследование башни мэрии Потакета, страдающей от протечек.
Я уверен, что это тот случай, когда я не понимаю документацию, но есть ли способ добиться того, что я ищу? А именно, чтобы иметь возможность передать строку поиска без кавычек и получить именно то, что я получаю сейчас, или с кавычками и получить только эту точную фразу?