Апострофы и поиск по SQL Server FT - PullRequest
3 голосов
/ 24 марта 2009

У меня настроен поиск FT в SQL Server 2005, но я не могу найти способ сопоставить ключевое слово "Lias" с записью с "Lia's". Что я в основном хочу, так это разрешить людям искать без апострофов.

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

Ответы [ 3 ]

1 голос
/ 24 марта 2009

РЕДАКТИРОВАТЬ 2: только что понял, что это на самом деле не решает вашу проблему, пожалуйста, игнорируйте и смотрите другой ответ! Приведенный ниже код вернет результаты для случая, когда пользователь вставил апостроф, которого там быть не должно, например, «оставил свой груз».

У меня нет FT, установленного локально, и я не проверял это - вы можете использовать синтаксис CONTAINS, чтобы проверить как исходное вхождение, так и исключение апострофов, т.е.

SELECT *
FROM table
WHERE CONTAINS ('value' OR Replace('value', '''',''))

РЕДАКТИРОВАТЬ: Вы можете искать фразы, используя двойные кавычки, например,

SELECT *
FROM table
WHERE CONTAINS ("this phrase" OR Replace("this phrase", '''',''))

См. Документация MSDN для СОДЕРЖАНИЯ . Это фактически указывает на то, что знаки препинания все равно игнорируются, но опять же я не проверял; возможно, стоит попробовать CONTAINS('value') сам по себе.

0 голосов
/ 26 марта 2009

Еще одна попытка:

SELECT surname
FROM table
WHERE surname LIKE '%value%'
OR REPLACE(surname,'''','') LIKE '%value%'

Это работает для меня (без включенного FT), т.е. я получаю те же результаты при поиске O'Connor или OConnor.

0 голосов
/ 25 марта 2009

Я не использовал FT, но при выполнении запросов к столбцам varchar и при поиске фамилий, таких как O'Reilly, я использовал:

surname like Replace( @search, '''', '') + '%' or
Replace( surname,'''','') like @search + '%' 

Это позволяет указывать апостроф либо в значении базы данных, либо в поисковом запросе. Это также очевидно будет выступать как собака с большим столом.

Альтернативой (вероятно, тоже не очень удачной) будет сохранение второй копии данных без лишних буквенных символов и поиск (также?) По этой копии. Так что оригинал содержал бы Лию и 2-ю копию Лия. Удвоение объема хранения и т. Д.

...