У меня есть таблица (Каталог) с одним столбцом (Заголовок).В этом столбце хранится информация о песне (исполнитель, название, ремикс).У меня есть ситуация, когда мне нужно найти совпадения по поисковому запросу.
Я включил SQL Server FTS и создал каталог FTS, используя столбец Заголовок.Я начал тестирование, используя FREETEXTTABLE, где я передаю поисковый термин.
Я обнаружил, что это возвращает ко многим не относящимся к делу результатам, хотя результаты с самым высоким рейтингом обычно являются правильными, если заголовок существует в таблице каталога.Один из подходов, который я использовал, состоял в том, чтобы преобразовать RANK в проценты и отображать результаты только в тех случаях, когда процент больше 90. Проблема заключается в том, что запрос по-прежнему возвращает несущественные результаты, если заголовок не существует в таблице каталога.
Альтернативой является использование CONTAINSTABLE.Проблема здесь в том, что мне пришлось бы динамически генерировать запрос в коде (разбивать слова), создавая что-то вроде:
SELECT DISTINCT ft.[rank], [Id]
FROM CONTAINSTABLE(Catalogs, Title, '"artist" AND "title" AND "remix"') AS ft
JOIN [Catalogs] ON [Catalogs].[Id] = ft.[KEY]
Дилемма состоит в том, что в поисковом запросе нет разделителей.Это означает, что я не могу логически разбить строку на исполнителя и название, а только на слова.Иногда включаются другие термины, такие как метка, которая приведет к сбою вышеуказанного запроса.
Я немного застрял.Кто-нибудь сталкивался с подобной проблемой с использованием SQL Server FTS?Есть ли подход между CONTAINSTABLE и FREETEXTTABLE?