Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос для поиска.  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Здравствуйте.
Есть клиентское приложение, в котором реализован поиск по системе

Сейчас работает так:
SELECT ... 
FROM ...
WHERE CONTAINS(flddd, FORMSOF(INFLECTIONAL, "Анна"))

например, на моей базе выдает несколько сотен записей

Но, если сделать так
WHERE CONTAINS(flddd, FORMSOF(INFLECTIONAL, "Ан"))

, то всего десяток записей, потому что словоформ меньше
В моем понимании это плохо. Хотя, не уверен.

Гугл кстати на "Анна" выдает 28млн записей, а на "Ан" 11млн. Т.е меньше.

Мне интересно как настроен поиск в Ваших системах, какие запросы?
Может правильнее ранжировать по частоте вхождения?
Может быть, существуют шаблоны для таких задач.

Спасибо.
21 мар 14, 14:29    [15766720]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для поиска.  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Ну Гугл в этом случае нам не советчик

А чего вы ожидали и что вас не устраивает?

вы вопрос так и не сфорумлировали.

У вас два разных запроса, возвращающих разные результаты. Нормально.

Вы можете не использовать FORMSOF, кроме того вы можете использовать запрос с критерием типа

where 
CONTAINS(flddd, FORMSOF(INFLECTIONAL, "Анна"))
OR
CONTAINS(flddd, FORMSOF(INFLECTIONAL, "Ан"))


и т.д..
21 мар 14, 14:34    [15766758]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для поиска.  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Winnipuh,
Например есть таблица документов
id docName docBody
Как бы Вы реализовали поиск по таблице?

учитывать нужно количество вхождений слова, словоформы и неполное совпадение
21 мар 14, 15:35    [15767342]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для поиска.  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
хороший совет, попробую так
http://toster.ru/q/6511
Реализовать это можно так:
1. Поисковый запрос разбивается на слова
2. Методом Стемминга определяется основа каждого слова и создаётся массив слов
3. После этого создаётся запрос к базе следующего вида
select * from Table where name like '%слово1%' and name like '%слово2%' and

4. Релевантность можно определять по количеству вхождения каждого слова в результате выдачи
это правильнее

но вопрос еще открыт, изучаю
23 мар 14, 18:32    [15773945]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить