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

Откуда:
Сообщений: 5
Здравствуйте! Вопрос в следующем: есть таблица1, в неё периодически вставляются новые строки (в основном текст от 100 до 10 000 символов). Нужно по этим строкам осуществить полнотекстовый поиск и, в случае совпадения, добавить данные в таблицу2.
Я хочу повесить на таблицу1 триггер, но не знаю, как выполнить по таблице INSERTED полнотекстовый поиск. Возможно ли в триггере создать полнотекстовый индекс по таблице INSERTED? Имеет ли это смысл? Производительность?
Также буду благодарен за другие идеи решения проблемы. Спасибо.
12 ноя 13, 06:33    [15112794]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Jaffar
Member

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

полнотекстовый поиск можно осуществить по самой таблице1, а триггер сделать "AFTER INSERT"

а таблицу inserted использовать для того чтобы определить какие строки были вставлены.

типа так:
if(exists(
select 1
from inserted i
join table_1 t on t.ID = i.ID
where
       t.Column1 = /* условие ПТП */ ))
12 ноя 13, 06:41    [15112804]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Buben
Member

Откуда:
Сообщений: 5
Jaffar, спасибо большое, за оперативный ответ! Всё оказывается просто!
А будут ли вновь вставленные строки участвовать в полнотекстовом поиске? Т.е. индексирование происходит мгновенно?
12 ноя 13, 06:49    [15112811]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Buben
Jaffar, спасибо большое, за оперативный ответ! Всё оказывается просто!
А будут ли вновь вставленные строки участвовать в полнотекстовом поиске? Т.е. индексирование происходит мгновенно?


ну не мгновенно, но к моменту выполнения триггерного кода они будут везде где нужно.
12 ноя 13, 07:15    [15112833]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Buben
А будут ли вновь вставленные строки участвовать в полнотекстовом поиске? Т.е. индексирование происходит мгновенно?
Разве полнотекстовый индекс перестраивается не асинхронно, по расписанию?
12 ноя 13, 08:56    [15113002]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
alexeyvg
Buben
А будут ли вновь вставленные строки участвовать в полнотекстовом поиске? Т.е. индексирование происходит мгновенно?
Разве полнотекстовый индекс перестраивается не асинхронно, по расписанию?

Можно задать и автоматически, но латентность и нагрузка присутствуют. Самое интересное, зачем в триггере делать полнотекстовый поиск ?

автор
Нужно по этим строкам осуществить полнотекстовый поиск и, в случае совпадения, добавить данные в таблицу2.

Сделать по расписанию, запустить SB , но не имея представления о предметной области - ответы сложны.

Видимо сайтостроитель, с рубриками или подобное что велосипедит.
12 ноя 13, 09:11    [15113033]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Buben
Member

Откуда:
Сообщений: 5
Ken@t, нужно в потоке непрерывно поступающей информации выбирать тексты, содержащие определенные ключевые слова. Сейчас я реализовал извлечение данных из таблицы1 в хранимой процедуре, запускаемой по расписанию, но из-за особенностей логики такая схема получается слишком громоздкой и неудобной. Фильтрация и выполнение определенных действий сразу, по мере поступления данных, решил бы многие проблемы.
12 ноя 13, 09:30    [15113126]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Buben
Ken@t, нужно в потоке непрерывно поступающей информации выбирать тексты, содержащие определенные ключевые слова. Сейчас я реализовал извлечение данных из таблицы1 в хранимой процедуре, запускаемой по расписанию, но из-за особенностей логики такая схема получается слишком громоздкой и неудобной. Фильтрация и выполнение определенных действий сразу, по мере поступления данных, решил бы многие проблемы.


по хорошему бы делать вставку через только одну процедуру - тогда можно в ней все делать и триггер для этого не нужен будет.
12 ноя 13, 10:04    [15113297]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Buben
Фильтрация и выполнение определенных действий сразу, по мере поступления данных, решил бы многие проблемы.
А много данных вставляется за одну операцию? В inserted можно искать и просто лайками, без полнотекстового поиска.

Ну или городить более сложную схему...
12 ноя 13, 10:22    [15113419]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Buben
Member

Откуда:
Сообщений: 5
Jaffar, идея хороша. Но данные приходят в виде запроса INSERT INTO таблица1 (поле1, поле2, поле3, поле4) VALUES ('aaa', 'bbb', 'ccc', 'ddd'), ('aaa', 'bbb', 'ccc', 'ddd'), ('aaa', 'bbb', 'ccc', 'ddd'),('aaa', 'bbb', 'ccc', 'ddd'),...
Изменить запрос не проблема, но данные идут именно пачкой. Не представляю, как можно передать это в хранимую процедуру.
12 ноя 13, 10:23    [15113425]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Buben
Member

Откуда:
Сообщений: 5
alexeyvg, данных пока относительно немного. Но полнотекстовый поиск все-таки предпочтительнее, т.к. ищет формы слов, расстояние между ними, веса и т.д.
12 ноя 13, 10:25    [15113434]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Jaffar

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

))) В случае новомодного ОРМ, может не срастись. А покрывает ли полнотекстовый поиск требования ТС ?

Возможно, я бы использовал SB. Архитектурно проще , чем джоб, латентность всяко будет, производительность на вставке в основную таблицу не потеряется... Все равно, это способы решения , но задачу мы не услышали.
12 ноя 13, 10:29    [15113446]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Buben
Jaffar, идея хороша. Но данные приходят в виде запроса INSERT INTO таблица1 (поле1, поле2, поле3, поле4) VALUES ('aaa', 'bbb', 'ccc', 'ddd'), ('aaa', 'bbb', 'ccc', 'ddd'), ('aaa', 'bbb', 'ccc', 'ddd'),('aaa', 'bbb', 'ccc', 'ddd'),...
Изменить запрос не проблема, но данные идут именно пачкой. Не представляю, как можно передать это в хранимую процедуру.



ну если не особо напрягает переписывать клиента - то можно передавать данные в процедуру в виде входных параметров и там уже делать их анализ.

Подумайте возможно можно обойтись LIKE`ом.


если нет - то можно посмотреть вот http://technet.microsoft.com/ru-ru/library/ms142575.aspx.
12 ноя 13, 12:58    [15114548]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Jaffar
Buben
Jaffar, спасибо большое, за оперативный ответ! Всё оказывается просто!
А будут ли вновь вставленные строки участвовать в полнотекстовом поиске? Т.е. индексирование происходит мгновенно?


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


Это не всегда так, правильный ответ был бы: как повезет, может будут уже проиндексированы, а может и нет.
12 ноя 13, 14:36    [15115459]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Winnipuh
Jaffar
ну не мгновенно, но к моменту выполнения триггерного кода они будут везде где нужно.


Это не всегда так, правильный ответ был бы: как повезет, может будут уже проиндексированы, а может и нет.

Ken@t
alexeyvg
Разве полнотекстовый индекс перестраивается не асинхронно, по расписанию?

Можно задать и автоматически, но латентность и нагрузка присутствуют.
Автоматически - это опция CHANGE_TRACKING AUTO?

ИМХО это гарантирует, что во время транзакции индекс обновлён не будет. Не грязные же данные читает индексатор?
Это значит, что полнотекстовый индекс после коммита изменений в таблицах обновится так скоро, как это возможно, не более.
12 ноя 13, 18:25    [15117525]     Ответить | Цитировать Сообщить модератору
 Re: полнотекстовый поиск в таблице INSERTED  [new]
Finsman
Member

Откуда: Da UK.
Сообщений: 404
Buben
Ken@t, нужно в потоке непрерывно поступающей информации выбирать тексты, содержащие определенные ключевые слова. Сейчас я реализовал извлечение данных из таблицы1 в хранимой процедуре, запускаемой по расписанию, но из-за особенностей логики такая схема получается слишком громоздкой и неудобной. Фильтрация и выполнение определенных действий сразу, по мере поступления данных, решил бы многие проблемы.


NSA?
12 ноя 13, 20:18    [15117926]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить