Здравствуйте, Lathe, Вы писали:
L>Добрый день, столкнулся с такой проблемой:
L>Есть база данных со списком продуктов, по ним нужно делать поиск.
L>Поиск должен искать словоформы перечисленных слов расположенных не далеко друг от друга.
L>Причем в тексте должны упоминаться все перечисленные слова.
L>Использую MS SQL Server 2008.
L>Сначала пользовал FREETEXTTABLE, но он срабатывает даже если встречается только одно слово.
L>На пример, для запроса "домик в деревне" он находит "ЕЛОЧНОЕ УКРАШЕНИЕ ДОМИК".
L>Попробовал использовать CONTAINSTABLE с запросом вида:
L>FORMSOF(Inflectional,"Домик") AND FORMSOF(Inflectional,"в") AND FORMSOF(Inflectional,"Деревне")
L>или
L>FORMSOF(Inflectional,"Домик") AND "в" AND FORMSOF(Inflectional,"Деревне")
L>так эта зараза срубается на стоп-словах
, те на запрос FORMSOF(Inflectional,"в") или просто "в" возвращает всегда False.
L>Стоп слова бывают разные, разной длины и тд, так что каждое слово запроса пробивать на наличие в стоп листе не хотелось бы.
L>В общем такой вопрос можно как-нить заставить SQL Server искать словоформы всех слов указанных в запросе и желательно расположенных не далеко друг от друга.
L>Заранее спасибо за помощь
в общем сам разобрался
Идея в следующем Rank найденого ответа зависит от количества найденных слов, соответственно надо выбирать результаты с максимальным рангом
Соответственно
FREETEXTTABLE и MAX(RANK).