Звездочка полнотекстового поиска возвращает неверный результат
У меня есть таблица кораблей с индексом FTS, которая была создана как:
CREATE FULLTEXT INDEX ON Ship
(
Name
)
KEY INDEX PK_Ship_Id
ON MyCatalog
WITH CHANGE_TRACKING AUTO, STOPLIST OFF;
И когда я запускаю запрос ниже:
select Name From Ship where CONTAINS(Name, N'"n*"');
Я получаю неправильный результат, например "Витамин D3 1000 Iu". Но я хочу получить только те строки, где в поле имени любое слово начинается с символа 'n'.
1 ответ
Двигатель FTS имеет странную "особенность", когда вы пытаетесь найти что-то, как CONTAINS(Name, N'"n*"')
, он ищет все числа, потому что он хранит числа как NN.
Лучшее решение, которое было основано в этих двух случаях (CONTAINS(Name, N'"n*"'), CONTAINS(Name, N'"nn*"')
) используйте "лайк" поиск.