|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Добрый день. Сервер: Сервер рабочий: Microsoft SQL Server 2016 (SP2-CU10) (KB4524334) - 13.0.5492.2 (X64) Oct 4 2019 19:14:08 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor) Стоит задача следующая: 1.При ходят банковские выписки от 10 до 5000. По большей части 100-200 строк. 2.Создается временная таблица #Table_Vipiska (ID int identity(1,1), [Назначение] varchar(8000) collate Cyrillic_General_BIN) Поле [Назначение] содержит обычно 100-300 символов. 3. Есть 7 таблиц разной структуры, содержащие номера документов (в каждой таблице по 1 полю с номером) типо: 34ТТ2323/2020, 234324324, 3333/44 и т.п. Длина номеров от 8 до 20 символов. Суммарно все 7 таблиц содержат около 20 млн. записей, но не равномерно (есть таблицы на 200 тыс, есть на 10 млн). 4.Поиск происходит так update P set ID_doc=T.ID_doc from #Table_Vipiska P cross join (select ID_doc, '%'+Number+'%' collate Cyrillic_General_BIN [Find] from dbo.Table(1-7)) T where P.[Назначение] like T.[Find] Если документ найден в таблице 2, то поиск прекращается по этой записи и эта запись исключается из поиска по таблицам 3-7. Писк медленный. Хочу применить полнотекстовый поиск. Вопрос: поможет мне он, если Номера которые нужно искать могут быть не отделены пробелами, а например разделительными символами могут быть (),.;#№ и т.п. Конечный список у меня будет, но пока его нет. А например /\ символы могут содержаться в номере для поиска и не должны считаться разделительными символами. Если это модно реализовать, то подскажите как и где указывать разделительные символы, а где которые считать частью слова? С полнотекстовым поиском только в начале знакомства. П.С. collate Cyrillic_General_BIN используется для ускорения Like ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:29 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 При ходят Писк Чтобы полнотекстовый поиск работал - надо великий и могучий подучить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 18:36 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
aleks222 mih.dim1 При ходят Писк Чтобы полнотекстовый поиск работал - надо великий и могучий подучить. Спасибо за ответ по делу. Торопился опубликовать - не проверил орфографию. Прошу прощения, если это задевает кого-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:09 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1, по моему мнению для таких объемов и для таких условий поиска можно использовать регулярные выражения. Поищите, как создать CLR функцию с регулярными выражениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:14 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Точнее, с помощью регулярных выражений можно извлекать номера, а потом уже объединять. Или у вас нет какого-то единого шаблона для номеров? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:15 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 Номера которые нужно искать могут быть не отделены пробелами, а например разделительными символами могут быть (),.;#№ и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 19:45 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
интересно было бы вычистить все слова из [Назначение] при вставке в Table_Vipiska, оставить в отдельное поле например только числа больше ... и число-букво-символьные комбинации, и по этому полю уже искать. Если вы импортируете один раз в Table_Vipiska, а ищите много раз потом, то возможно так быстрее будет ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:08 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Владислав Колосов Точнее, с помощью регулярных выражений можно извлекать номера, а потом уже объединять. Или у вас нет какого-то единого шаблона для номеров? Единого шаблона нет. В теории в номер может быть все что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:11 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
invm mih.dim1 Номера которые нужно искать могут быть не отделены пробелами, а например разделительными символами могут быть (),.;#№ и т.п. а почему бесполезен? Там нельзя исключать часть символов при поиске. Типо задать некий словарь: настроить под себя поиск или эт не предусмотрено микрософтом? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:13 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
PizzaPizza интересно было бы вычистить все слова из [Назначение] при вставке в Table_Vipiska, оставить в отдельное поле например только числа больше ... и число-букво-символьные комбинации, и по этому полю уже искать. Если вы импортируете один раз в Table_Vipiska, а ищите много раз потом, то возможно так быстрее будет Вот и думаю. 1.Либо полнотекстовый поиск. 2.Либо самому бить на слова и потом искать. Я по идее хотел если не получить со стандартным поиском попробовать типо разложить на слова в отдельную таблицу навешать индекс и искать. Но полнотекстовый именно это и делает. Не хочу городить велосипед. Тут вопрос как полнотекстовый поиск работает в плане построения/выделения слов например для русского языка (это раз). Притом полнотекстовый индекс нужно будет строить "налету" на временную таблицу, а он асинхронный (это два что очень смущает). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:19 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
invm mih.dim1 Номера которые нужно искать могут быть не отделены пробелами, а например разделительными символами могут быть (),.;#№ и т.п. Может предварительно все спецсимволы убрать которые мешать будут поиску. Вопрос только поможет мне это, если тексты маленькие в которых искать и их не много, а значений, которые надо найти, очень много. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:21 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 Вопрос только поможет мне это, если тексты маленькие в которых искать и их не много, а значений, которые надо найти, очень много. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:37 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
invm mih.dim1 Вопрос только поможет мне это, если тексты маленькие в которых искать и их не много, а значений, которые надо найти, очень много. А что поможет? Разбить по словам самому, навешать индекс и поиск через равно делать? или еще есть варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 20:58 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1, заведомо лишнее убрать - поможет Если я правильно понял, вы ищите не тексты, поэтому непонятно зачем вам полно текстовый поиск. У вас задача поиска практически случайных цифровых и цифро-символьных комбинаций. Зачем искать в словах "стол" "деревянный", то, что там быть не может никогда, тк номер у вас имеет структуру, значительно отличающуюся от регулярных слов? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 21:55 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 Вот и думаю. 1.Либо полнотекстовый поиск. 2.Либо самому бить на слова и потом искать. ... Посмотрите статью про полнотекстовый поиск на Хабре. Там пара готовых рецептов, если не писать собственный модуль для FT. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 10:30 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 Писк медленный. Хочу применить полнотекстовый поиск. Тогда потом будет и скорость, и, главное, целостность данных. Парсить можно на SQL, или скриптами C# в SSIS, или отдельным приложением. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 11:18 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1 3. Есть 7 таблиц разной структуры, содержащие номера документов Надо сделать одну таблицу с номерами документов и id. Во все остальные таблицы передавать этот id. mih.dim1 Писк медленный Еще бы он был быстрый. mih.dim1 Хочу применить полнотекстовый поиск. А смысл? Надо чинить мусорную структуру а не полнотекстовые поиски внедрять. Еще надо бы формализировать номер документа, а то работаете со всяким шлаком, а потом пытаетесь это выправить поисками по регуляркам. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 11:25 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Ferdipux mih.dim1 Вот и думаю. 1.Либо полнотекстовый поиск. 2.Либо самому бить на слова и потом искать. ... Посмотрите статью про полнотекстовый поиск на Хабре. Там пара готовых рецептов, если не писать собственный модуль для FT. Читал и оставил на крайний случай. Но походу он настал. Т.к. с временными таблицами полнотекстовый поиск не работает, ка выяснилось ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:31 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
alexeyvg mih.dim1 Писк медленный. Хочу применить полнотекстовый поиск. Тогда потом будет и скорость, и, главное, целостность данных. Парсить можно на SQL, или скриптами C# в SSIS, или отдельным приложением. К этому все и идет. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:32 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
crutchmaster mih.dim1 3. Есть 7 таблиц разной структуры, содержащие номера документов Надо сделать одну таблицу с номерами документов и id. Во все остальные таблицы передавать этот id. Это разные сущности. Их можно объединить только во время поиска, а это перенос 20 млн. во временную таблицу. А это не вариант mih.dim1 Писк медленный Еще бы он был быстрый. mih.dim1 Хочу применить полнотекстовый поиск. А смысл? Надо чинить мусорную структуру а не полнотекстовые поиски внедрять. Еще надо бы формализировать номер документа, а то работаете со всяким шлаком, а потом пытаетесь это выправить поисками по регуляркам. Тут уж есть что есть то есть. Эти данные не исправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:36 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
mih.dim1, У вас стоит задача - найти одну одну из 20 млн сигнатур в строках произвольного набора символов. Что приходит на ум - это многопоточная обработка, параллельные вычисления. Может помочь видеокарта с ее 128/512 процессорными ядрами, если сможете запрограммировать вычисления. а-ля биткойн майнинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:45 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Владислав Колосов mih.dim1, У вас стоит задача - найти одну одну из 20 млн сигнатур в строках произвольного набора символов. Что приходит на ум - это многопоточная обработка, параллельные вычисления. Может помочь видеокарта с ее 128/512 процессорными ядрами, если сможете запрограммировать вычисления. а-ля биткойн майнинг. Интересно, но это не мой пока уровень ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 20:34 |
|
Поиск по назначению выписки (Полнотекстовый поиск) по большому словарю (20 млн.)
|
|||
---|---|---|---|
#18+
Выбрал вариант с функцией из поста на харбе Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Вот так работает в на 2 порядка быстрее. На тестовом варианте было 30 мин против 4 сек (из них 2 сек заполнение #Table_Vipiska_Word) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 20:40 |
|
|
start [/forum/topic.php?fid=46&msg=39960085&tid=1686089]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 299ms |
total: | 448ms |
0 / 0 |