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

Откуда:
Сообщений: 142
Здравствуйте !

Есть вот такой запрос:

SELECT FT_TBL.*,
KEY_TBL.RANK
FROM dbo.tbl_history AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.tbl_history, history, 'мальчик', LANGUAGE 'Russian', 2) AS KEY_TBL
ON FT_TBL.id_history = KEY_TBL.[KEY];

Или вот так я его еще делаю:

SELECT id_history,history
FROM tbl_history
WHERE
FREETEXT (history,' мальчик ')

Не могу понять, как сделать так, чтобы искался мальчик во всех формах. При создании индекса указывала, что язык русский, но если
попробовать указать ' мальч ' ничего не находится. :(

Ваобще мне надо найти примерно такое предложение: "маленький мальчик пошел в лес и там поймал коричневого жука". Но если такого нет, то хотя бы все, в чем есть слова "маленький", "мальчик"/"мальчики"(во всех формах) , "пошел"/"пошла" (во всех формах), "поймал"/"поймали"/"пойман" (во всех формах), "жук". Пока не могу так же понять, как использовать стоп слова, чтобы не искалось "и", а так же "как".
16 апр 17, 00:41    [20405176]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск, небольшой вопрос  [new]
rnk
Member

Откуда:
Сообщений: 126
ElenaTomsk
Здравствуйте !

Есть вот такой запрос:

Не могу понять, как сделать так, чтобы искался мальчик во всех формах. При создании индекса указывала, что язык русский, но если
попробовать указать ' мальч ' ничего не находится. :(

Вообще говоря, "мальч" не является основой.

ElenaTomsk
Ваобще мне надо найти примерно такое предложение: "маленький мальчик пошел в лес и там поймал коричневого жука". Но если такого нет, то хотя бы все, в чем есть слова "маленький", "мальчик"/"мальчики"(во всех формах) , "пошел"/"пошла" (во всех формах), "поймал"/"поймали"/"пойман" (во всех формах), "жук". Пока не могу так же понять, как использовать стоп слова, чтобы не искалось "и", а так же "как".

Словоформы ищутся по запросу INFLECTIONAL, что требует применения CONTAINS или CONTAINSTABLE.
17 апр 17, 14:06    [20407697]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск, небольшой вопрос  [new]
Eleanor
Member

Откуда:
Сообщений: 3414
ElenaTomsk,

В документации можно посмотреть примеры нужных вам запросов.

SELECT *
FROM tbl_history
WHERE CONTAINS (history, 'FORMSOF(INFLECTIONAL, "мальчик") AND FORMSOF(INFLECTIONAL,"поймал")')
17 апр 17, 15:03    [20407900]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск, небольшой вопрос  [new]
ElenaTomsk
Member

Откуда:
Сообщений: 142
Eleanor
ElenaTomsk,

В документации можно посмотреть примеры нужных вам запросов.

SELECT *
FROM tbl_history
WHERE CONTAINS (history, 'FORMSOF(INFLECTIONAL, "мальчик") AND FORMSOF(INFLECTIONAL,"поймал")')



Спасибо большое, то, что надо ! Скажите, а как бы можно сделать так, чтобы подставлять значения из переменной в FORMSOF(INFLECTIONAL,"поймал")') т.е. как-то парсить и подставлять из переданного в переменную предложения видимо надо, так?

Чтобы вот:

declare @val nvarchar (255) = 'мальчик пошел в лес и поймал жука' а из этого получился такой запрос, как вы написали ?
Я пока могу придумать только что-то с execute, но это не красиво
18 апр 17, 08:04    [20409442]     Ответить | Цитировать Сообщить модератору
 Re: Полнотекстовый поиск, небольшой вопрос  [new]
Eleanor
Member

Откуда:
Сообщений: 3414
ElenaTomsk,

Вам нужно написать функцию dbo.Inflectional, которая приведет строку к нужно виду. Функция будет подменять пробелы или иные разделители на ") AND FORMSOF(INFLECTIONAL,"

DECLARE @val nvarchar (255) = 'мальчик пошел в лес и поймал жука'
DECLARE @val_inflectional nvarchar(4000) = dbo.Inflectional ('мальчик пошел в лес и поймал жука')
SELECT * FROM tbl_history WHERE CONTAINS (history, @val_inflectional)
18 апр 17, 10:33    [20409851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить