powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
9 сообщений из 9, страница 1 из 1
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39973516
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, коллеги.

Есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TextContent
(
	[Content] [nvarchar](max) COLLATE Cyrillic_General_CI_AI NULL,
	[Id] [int] IDENTITY(1,1) NOT NULL,
	CONSTRAINT [PK_TextContent] PRIMARY KEY CLUSTERED ([Id] ASC)
)



По колонке Content построен полнотекстовый индекс.
Код: sql
1.
2.
CREATE FULLTEXT INDEX ON TextContent ([Content] Language 1049) 
KEY INDEX [PK_TextContent] WITH STOPLIST = OFF, CHANGE_TRACKING AUTO



В таблице около 500 тыс. записей.

Такой запрос работает несколько секунд
Код: sql
1.
2.
DECLARE @QueryString NVARCHAR(4) = N'"1*"';
select Id from TextContent where CONTAINS(Content, @QueryString)



Но запрос работает медленно, только если ищем по значениям "0*", "1*", ..., "9*", "a*", ..., "f*" (т.е. цифры из шестнадцатеричной системы счисления). По "g*", "я*" и т.д. работает мгновенно.

Может кто-то уже сталкивался с такой проблемой?
Спасибо.

Microsoft SQL Server 2017 (RTM-CU19) (KB4535007) - 14.0.3281.6 (X64) Jan 23 2020 21:00:04 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39973618
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tsw
Доброго времени суток, коллеги.

Но запрос работает медленно, только если ищем по значениям "0*", "1*", ..., "9*", "a*", ..., "f*" (т.е. цифры из шестнадцатеричной системы счисления). По "g*", "я*" и т.д. работает мгновенно.

Может кто-то уже сталкивался с такой проблемой?
Спасибо.



1. 16-я система тут ни причем, а находит правильно?
2. Все вот эти "1*", "п*" и .д. - это по в общем-то и не FTS, но это дело ваше
3. что охначает "медленно"? 500 000 - это не объем для FTI и FTS
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39973664
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tsw
Но запрос работает медленно, только если ищем по значениям "0*", "1*", ..., "9*", "a*", ..., "f*" (т.е. цифры из шестнадцатеричной системы счисления). По "g*", "я*" и т.д. работает мгновенно.
А sys.dm_fts_parser что покажет по этим поисковым строкам? Большая разница в числе строк?
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39974096
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

По порядку:
1. Да, находит правильно.
2. "1*" - это самый простой вариант запроса на котором воспроизводится проблема. В реальности запрос идет по части номера документа, типа "ДОГТ-2*"
3. Медленно - значит запрос по "z*" работает 0,1 сек. А запрос по "1*" работает в 100-1000 раз дольше, более 10 сек.
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39974102
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Запрос
Код: sql
1.
select * from sys.dm_fts_parser('"1"', 1049, 0, 0)


выдает
keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x0031101Noise Word1010x006E006E0031101Noise Wordnn101

Для букв
Код: sql
1.
select * from sys.dm_fts_parser('"b"', 1049, null, 0)


keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x0062101Exact Matchb0b

Вроде логично, тут проблем не вижу.
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39974262
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tsw
Вроде логично, тут проблем не вижу.
Так вы же * не указали
Надо прямо как в поисковом запросе:
Код: sql
1.
2.
select * from sys.dm_fts_parser('"1*"', 1049, 0, 0)
select * from sys.dm_fts_parser('"я*"', 1049, 0, 0)
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39975472
andrew_tsw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Да, действительно. Пробовал со звездочкой и без. В результате запросы и их результаты перемешались.
Цифра + (star)
Код: sql
1.
select * from sys.dm_fts_parser('"1*"', 1049, 0, 0)


keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x0031101Exact Match1010x006E006E0031101Exact Matchnn101
Цифр
Код: sql
1.
select * from sys.dm_fts_parser('"0"', 1049, 0, 0)


keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x0030101Noise Word0000x006E006E0030101Noise Wordnn000

Для букв:
Буква+ (star)
Код: sql
1.
select * from sys.dm_fts_parser('"я*"', 1049, 0, 0)


keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x044F101Exact Matchя0я
Буква
Код: sql
1.
select * from sys.dm_fts_parser('"b"', 1049, 0, 0)


keywordgroup_idphrase_idoccurrencespecial_termdisplay_termexpansion_typesource_term0x0062101Noise Wordb0b

Доп. подробности:
Выснилось, что запрос начинает тормозить на базе после заполнения её тестовыми данными.
Т.е. взяли базу в которой 150 тыс. документов. И скриптом добавили еще 300 тыс. документов, после чего перестроили индекс для FTS.
Особенность тестовых данных - в качестве значений используются GUID.
Т.е. 2/3 строк в таблице TextContent поле Content имеет вид:
Код: sql
1.
Физическое лицо  0 03957B64-4E50-4B77-BF3D-3BFA3BAB0B4A 061238BB-3DC5-4289-9F05-526CC16BF66E 1  <и еще много GUID> 


Вот и символы из 16-рич СС.
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39975498
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tsw

16-рич СС.


Уверен, это не то, о чем многие подумали
...
Рейтинг: 0 / 0
Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
    #39975503
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tsw,

к слову: у вас одиночные цифры и латинские символы - шумные, возможно и рус. тоже.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Полнотекстовый поиск (Full Text Search): медленный поиск по префиксу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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