Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full-Text Search / 14 сообщений из 14, страница 1 из 1
06.02.2019, 18:45
    #39770366
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Здравствуйте.
MS SQL SERVER 2017

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

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



почему без слова "дел" есть результат а с "дел" нет результата ?
...
Рейтинг: 0 / 0
06.02.2019, 19:08
    #39770376
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
АлексашаЗдравствуйте.
MS SQL SERVER 2017

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

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



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

есть поле, где есть все три ?
...
Рейтинг: 0 / 0
06.02.2019, 22:54
    #39770443
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Да, есть записи где все 3 слова. Чисто дел* находит как только добавишь ещё слово нет результата :(
...
Рейтинг: 0 / 0
07.02.2019, 13:10
    #39770630
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
АлексашаДа, есть записи где все 3 слова. Чисто дел* находит как только добавишь ещё слово нет результата :(


приведите пример - какая запись не находится, а должна, по вашему мнению
...
Рейтинг: 0 / 0
10.04.2019, 09:42
    #39799167
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Ролг Хупин,

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

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



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



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

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



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



Блин ... В чем дело?
...
Рейтинг: 0 / 0
10.04.2019, 12:48
    #39799272
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Алексаша,

е нерусская?
...
Рейтинг: 0 / 0
10.04.2019, 13:30
    #39799313
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Владислав Колосов,

проверил. кириллическая
...
Рейтинг: 0 / 0
11.04.2019, 10:41
    #39799767
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
АлексашаРолг Хупин,

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

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



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





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

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



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



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


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

Код: sql
1.
2.
3.
select *
from dbo.Table
where contains (field,N '"обустр*" and "лич*" and "де*"')
...
Рейтинг: 0 / 0
11.04.2019, 14:06
    #39799912
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
А коллейшн какой?
...
Рейтинг: 0 / 0
11.04.2019, 14:38
    #39799950
dvk92
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Зачем вам после слово дел - *?

Оно же является последним в строке?
...
Рейтинг: 0 / 0
15.05.2019, 11:56
    #39813447
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Нашел ответ на свой вопрос.
В студии правой мышкой по таблице с полнотекстовым поиском Полнотекстовый индекс -> Свойства. Вкладка общие, свойство список стоп-слов полнотекстового индекса = системный.

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



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

в итоге я в недоумении как правильно использовать список стоп-слов. получается перед запросом надо проверить не находится слово из раздела where в списке стоп-слов и если оно там есть то не использовать его.
или как это предполагается использовать по-уму?
ведь пользователь может ввести искомую фразу вместе с предлогом и в итоге из-за одного предлога "в" результат будет пуст
...
Рейтинг: 0 / 0
16.05.2019, 08:37
    #39813836
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
АлексашаНашел ответ на свой вопрос.
В студии правой мышкой по таблице с полнотекстовым поиском Полнотекстовый индекс -> Свойства. Вкладка общие, свойство список стоп-слов полнотекстового индекса = системный.

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



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

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

В том-то и смысл шумных слов, что они будут игнорироваться при поиске.
Если вы настроены отключить их, то готовьтесь к тому, что индекс будет намного больше, время поиска увеличится, а толку - почти 0.
Для того и придумали стоп-слова, чтобы не искать несущественные, например, все цифры, артикли всякие и т.д.
...
Рейтинг: 0 / 0
16.05.2019, 15:56
    #39814140
Алексаша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
Ролг Хупин,

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


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


В таком случае нужно проинформировать пользователя об исключении этого слова чтобы его не удивлял результат, который будет отличатся от ожидаемого.
Что скажите?
...
Рейтинг: 0 / 0
17.05.2019, 12:17
    #39814534
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Full-Text Search
АлексашаРолг Хупин,

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


а исключить слово "дел"
Код: sql
1.
2.
3.
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
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Full-Text Search / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]