Как избежать двойных кавычек внутри полнотекстовой функции SQL "содержит"?

Как избежать двойных кавычек внутри функции MS SQL "содержит"?

SELECT decision
FROM table 
WHERE CONTAINS(decision, '34" AND wide')

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

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

2 ответа

Решение

Из документации:

Пунктуация игнорируется. Следовательно, CONTAINS(testing, "computer failure") сопоставляет строку со значением "Где находится мой компьютер? Если найти его будет дорого".

поскольку FULLTEXT даже не указывает на пунктуацию, вам нужно отфильтровать результаты, используя LIKE:

SELECT  decision
FROM    table 
WHERE   CONTAINS(decision, '34 AND wide')
        AND decision LIKE '%34"%'

Это сохранит преимущества полного текста.

Ответ выше не работает в SQL Server 2008, если ваша строка для однозначного числа.

Это работает:

SELECT  partdescription
FROM    table  
WHERE   CONTAINS(partdescription, '10') 
        AND decision LIKE '%10"%'

Это не работает:

SELECT  partdescription
FROM    table  
WHERE   CONTAINS(partdescription, '6') 
        AND decision LIKE '%6"%'' 

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

Если используется список стоп-слов (или шумовых слов) системы, он содержит каждую из числовых цифр в качестве слов, которые следует игнорировать. Вы можете изменить содержимое списка стоп-слов или отключить стоп-слова.

 ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF;

После внесения одного из этих изменений затронутый текст необходимо переиндексировать, прежде чем отдельные цифры станут доступными для поиска. После переиндексации действительно можно будет искать "6".

Другие вопросы по тегам