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

Откуда: Левый берег
Сообщений: 344
Здравствуйте.
MS SQL SERVER 2017

Имеется таблица с настроенным полнотекстовым поиском по некоторому столбцу.
в этом столбце во многих записях имеется текст ... обустройство личных дел ... и ему подобных .... дел
не могу понять почему запрос не возвращает результата

select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "дел*"')


почему без слова "дел" есть результат а с "дел" нет результата ?
6 фев 19, 18:45    [21802995]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2669
Алексаша
Здравствуйте.
MS SQL SERVER 2017

Имеется таблица с настроенным полнотекстовым поиском по некоторому столбцу.
в этом столбце во многих записях имеется текст ... обустройство личных дел ... и ему подобных .... дел
не могу понять почему запрос не возвращает результата

select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "дел*"')


почему без слова "дел" есть результат а с "дел" нет результата ?


есть поле, где есть все три ?
6 фев 19, 19:08    [21803009]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 344
Да, есть записи где все 3 слова. Чисто дел* находит как только добавишь ещё слово нет результата :(
6 фев 19, 22:54    [21803119]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2669
Алексаша
Да, есть записи где все 3 слова. Чисто дел* находит как только добавишь ещё слово нет результата :(



приведите пример - какая запись не находится, а должна, по вашему мнению
7 фев 19, 13:10    [21803442]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 344
Ролг Хупин,

вот есть запись со значением в поле
field = "РЗЧ, обустройство личных дел"

при таких запросах не возвращает записи
select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "дел*"')


select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "де*"')


а вот так возвращает

select *
from dbo.Table
where contains (field, '"обустр*" and "лич*"')


select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "д*"')


Блин ... В чем дело?
10 апр 19, 09:42    [21857974]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6467
Алексаша,

е нерусская?
10 апр 19, 12:48    [21858191]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 344
Владислав Колосов,

проверил. кириллическая
10 апр 19, 13:30    [21858258]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2669
Алексаша
Ролг Хупин,

вот есть запись со значением в поле
field = "РЗЧ, обустройство личных дел"

при таких запросах не возвращает записи
select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "дел*"')


select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "де*"')




а вот так возвращает

select *
from dbo.Table
where contains (field, '"обустр*" and "лич*"')


select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "д*"')


Блин ... В чем дело?



Проверил, все запросы находят,, правда поле сделал nvarchar на всякий случай, и запросы тоже типа

select *
from dbo.Table
where contains (field,N '"обустр*" and "лич*" and "де*"')
11 апр 19, 10:41    [21859035]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
uaggster
Member

Откуда:
Сообщений: 590
А коллейшн какой?
11 апр 19, 14:06    [21859446]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
dvk92
Member

Откуда:
Сообщений: 10
Зачем вам после слово дел - *?

Оно же является последним в строке?
11 апр 19, 14:38    [21859516]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 344
Нашел ответ на свой вопрос.
В студии правой мышкой по таблице с полнотекстовым поиском Полнотекстовый индекс -> Свойства. Вкладка общие, свойство список стоп-слов полнотекстового индекса = системный.

если поставить значение индекса = выкл. то все работает как надо только как следствие вырос размер индекса.
решил посмотреть:
SELECT *
FROM sys.fulltext_system_stopwords ssw
WHERE language_id = 1049;


слово "дел" там присутствует как и другие (важная, вести) по которым у меня поиск не работал и предлоги.

в итоге я в недоумении как правильно использовать список стоп-слов. получается перед запросом надо проверить не находится слово из раздела where в списке стоп-слов и если оно там есть то не использовать его.
или как это предполагается использовать по-уму?
ведь пользователь может ввести искомую фразу вместе с предлогом и в итоге из-за одного предлога "в" результат будет пуст
15 май 19, 11:56    [21885119]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2669
Алексаша
Нашел ответ на свой вопрос.
В студии правой мышкой по таблице с полнотекстовым поиском Полнотекстовый индекс -> Свойства. Вкладка общие, свойство список стоп-слов полнотекстового индекса = системный.

если поставить значение индекса = выкл. то все работает как надо только как следствие вырос размер индекса.
решил посмотреть:
SELECT *
FROM sys.fulltext_system_stopwords ssw
WHERE language_id = 1049;


слово "дел" там присутствует как и другие (важная, вести) по которым у меня поиск не работал и предлоги.

в итоге я в недоумении как правильно использовать список стоп-слов. получается перед запросом надо проверить не находится слово из раздела where в списке стоп-слов и если оно там есть то не использовать его.
или как это предполагается использовать по-уму?
ведь пользователь может ввести искомую фразу вместе с предлогом и в итоге из-за одного предлога "в" результат будет пуст


В том-то и смысл шумных слов, что они будут игнорироваться при поиске.
Если вы настроены отключить их, то готовьтесь к тому, что индекс будет намного больше, время поиска увеличится, а толку - почти 0.
Для того и придумали стоп-слова, чтобы не искать несущественные, например, все цифры, артикли всякие и т.д.
16 май 19, 08:37    [21885853]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 344
Ролг Хупин,

Правильно ли я вас понял?
Получается если от клиента на сервер пришло условие поиска, т.е. слова кот. должен содержать документ, то прежде чем делать выборку надо проверить не входит ли слово в перечень стоп-листа
т.е. не выполнять такой запрос
select *
from dbo.Table
where contains (field, '"обустройство" and "личных" and "дел"')

а исключить слово "дел"
select *
from dbo.Table
where contains (field, '"обустройство" and "личных"')

В таком случае нужно проинформировать пользователя об исключении этого слова чтобы его не удивлял результат, который будет отличатся от ожидаемого.
Что скажите?
16 май 19, 15:56    [21886410]     Ответить | Цитировать Сообщить модератору
 Re: Full-Text Search  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2669
Алексаша
Ролг Хупин,

Правильно ли я вас понял?
Получается если от клиента на сервер пришло условие поиска, т.е. слова кот. должен содержать документ, то прежде чем делать выборку надо проверить не входит ли слово в перечень стоп-листа
т.е. не выполнять такой запрос
select *
from dbo.Table
where contains (field, '"обустройство" and "личных" and "дел"')

а исключить слово "дел"
select *
from dbo.Table
where contains (field, '"обустройство" and "личных"')

В таком случае нужно проинформировать пользователя об исключении этого слова чтобы его не удивлял результат, который будет отличатся от ожидаемого.
Что скажите?


Как вы проверите? заметьте, что шумные слова могут тоже быть представлены в юзерской фразе в какой-то форме
И что вы будете делать после того, как, предположим, проверите фразу и там будут стоп слова?

Не стоит заниматься фигней, изобретая велоспипед.

Почитайте для начала, что пишут здесь:
https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/transform-noise-words-server-configuration-option?view=sql-server-2017
17 май 19, 12:17    [21887111]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить