MS SQL Full-Text Search
От: Lathe Россия  
Дата: 21.12.08 03:39
Оценка:
Добрый день, столкнулся с такой проблемой:

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

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

В общем такой вопрос можно как-нить заставить SQL Server искать словоформы всех слов указанных в запросе и желательно расположенных не далеко друг от друга.

Заранее спасибо за помощь
Чаще делайте вид, что вы умный...привыкнут:-)
Re: MS SQL Full-Text Search
От: Lathe Россия  
Дата: 21.12.08 19:11
Оценка:
Здравствуйте, 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).
Чаще делайте вид, что вы умный...привыкнут:-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.