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

Откуда:
Сообщений: 127
Всем привет.
Возникла задача. Есть две БД.
В одной БД в таблице, в колонке содержатся логины(nvarchar). В другой БД в колонке есть текст(nvarchar(2000)) в которой эти логины появляются. Нужно эти логины найти и записать в рядом стоящую колонку второй базы(где текст).
Где искать решение, использовать семантический поиск SQL serverа, писать скрипт на вб или с# используя регулярные выражения для текста??
Я бы выбрал сам что-то, если бы глубоко разбирался. В идеале, конечно, если бы кто-нибудь написал скрипт компонент для SSIS, а я бы например, ящик пива поставил тому. Хотя мне достаточно будет подсказки
8 май 16, 18:52    [19148251]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Barclay
мне достаточно будет подсказки
Задачу можно решить многими способами.
Например, просто сделать запрос с условием LIKE
В общем, зависит от того, что вам нужно. Например, от того, какие требования к скорости.
Если важна производительность, то нужно сделать самодельную индексацию.
Полнотекстовый поиск, как я понимаю, невозможно настроить для этой задачи.
8 май 16, 19:20    [19148276]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

Откуда:
Сообщений: 127
alexeyvg,
запрос с условием LIKE можно сделать один раз ручками. это не проблема.
Нужен скрипт или хранимка, которая будет ежедневно в тексте(100 тыс. строк размером nvarchar2000) искать 1 из 2000 логинов.
8 май 16, 19:33    [19148292]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Barclay
alexeyvg,
запрос с условием LIKE можно сделать один раз ручками. это не проблема.
Нужен скрипт или хранимка, которая будет ежедневно в тексте(100 тыс. строк размером nvarchar2000) искать 1 из 2000 логинов.
Тогда самодельная индексация.
Справочник слов, и таблица вхождений слов в текст.
Таблицу вхождений обновлять при изменении текста.
8 май 16, 20:35    [19148359]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
alexeyvg
Barclay
alexeyvg,
запрос с условием LIKE можно сделать один раз ручками. это не проблема.
Нужен скрипт или хранимка, которая будет ежедневно в тексте(100 тыс. строк размером nvarchar2000) искать 1 из 2000 логинов.
Тогда самодельная индексация.
Справочник слов, и таблица вхождений слов в текст.
Таблицу вхождений обновлять при изменении текста.
Собственно, такое уже написано, см. http://social.technet.microsoft.com/wiki/ru-ru/contents/articles/12921.full-text.aspx
Но у вас несколько другой вариант, ведь вы не можете разделить текст на слова, у вас же нет правил для формирования логина? Вдруг логин будет 1пробелзапятая1?
Поэтому нужно делать похожую индексацию, но без разбиения на слова, для всех фрагментов от максимальной длины логина до 0.
8 май 16, 20:41    [19148369]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

Откуда:
Сообщений: 127
alexeyvg,
наверное, можно и так. Но мне нужно минимум действий.
я в начале упомянул регулярные выражения, напрмер, System.Text.RegularExpressions на VB.net.
насколько мне известно, там все придумано уже для случаев поиска по шаблону. может подскажет кто?

З.Ы. в моем случае это даже не шаблон логина, а конкретные логины (2000 шт.), которые нужно проверять по наличию в тексте.
8 май 16, 21:05    [19148431]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Barclay
которые нужно проверять по наличию в тексте.
Что есть наличие в тексте? Просто вхождение как подстроки?
Например, в тексте упоминается более одного логина. Что и куда записывать в этом случае?
8 май 16, 21:50    [19148521]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31780
Barclay
я в начале упомянул регулярные выражения, напрмер, System.Text.RegularExpressions на VB.net.
насколько мне известно, там все придумано уже для случаев поиска по шаблону. может подскажет кто?
В сиквеле тоже уже всё придумано - команда LIKE. То же по функциональности, что и System.Text.RegularExpressions, только быстрее.
Но вам же надо ещё быстрее? Тогда нужно приложить усилия.
8 май 16, 22:28    [19148655]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

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

в тексте или есть хотя бы один(достаточное условие), или нет требуемого логина.
если логин находим, то записываем найденный логин в таблицу с текстом, естественно, в тот же ряд.
8 май 16, 22:43    [19148689]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Barclay,

update t
 set
  [столбец с логином] = l.[логин]
from
 [Таблица с текстом] t cross apply
 (select top (1) [логин] from [Таблица с логинами] where t.[текст] like '%' + [логин] + '%') l;
8 май 16, 23:01    [19148732]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

Откуда:
Сообщений: 127
invm,
спасибо, во вторник потестю. отпишусь
9 май 16, 00:05    [19148860]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

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

update t
пока сделать не получается, ругается :The multi-part identifier "[dbo].[XXXXXX].[логин]" could not be bound.
Решил просто посмотреть Select'ом l.[Логин], t.[текст].
У меня 7 процессоров с 4 ядрами каждый + 32 Гб оперативы. Окончания запроса не дождался, за 7 минут обработано 650 строк:))
а должно быть мин.12 тыс. строк. Офигеть как долго
Однако, это все равно хорошее решение, есть ли идеи как ускорить процесс?
10 май 16, 10:20    [19151674]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Barclay
есть ли идеи как ускорить процесс?
Есть.
Заканчивайте партизанить и показывайте план запроса в формате sqlplan.
10 май 16, 10:46    [19151810]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
Barclay
Member

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

вот:)

К сообщению приложен файл (save.sqlplan - 14Kb) cкачать
10 май 16, 10:53    [19151844]     Ответить | Цитировать Сообщить модератору
 Re: Задайте вектор или куда копать?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Barclay,

Не может такой запрос на таком объеме данных так долго выполняться.
Смотрите в sys.dm_exec_requests освобождения каких ресурсов он ожидает при выполнении.
10 май 16, 11:03    [19151921]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить