|
|
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
Hi, All! Задача: Есть таблица с текстовым полем. Таблица меняется редко относительно поиска в ней. Хочется быстро находить записи, содержащие заданную подстроку. Т.к. подстрока может быть не только в начале текста, LIKE не будет эффективным. Какие алгоритмы посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 11:20 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
x1ca4064 , если "подстроки" имеют вполне определённые назначение - можно сделать индекс по ним... Или таблички типа ПодстрокаКодЗначение Строки содержащие подстрокуКодИД строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 11:42 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
krvsa, Нет, подстрока произвольна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 11:49 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
On 28.01.2011 11:20, x1ca4064 wrote: > Какие алгоритмы посоветуете? Какие ещё алгоритмы ? Полнотектовый поиск нужно применять, full text search -индексы. Они же R-tree. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 12:51 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
x1ca4064 , насколько "длинна" и "широка" та табличка? Как вариант, предложил бы такой способ... Сделать некий "индекс" или опять же таблички такого вида: - Значения полей строки просто склеиваются через некий разделитель - Такие строки так же склеиваются в одну строку через еще один разделитель (количество строк ограничено конечно) - Вся эта "каша" "порционально" записывается со ссылками на строки, в неё входящие Строчная группаКодЗначение Строки первоначальной таблицыКодИД строкиКод группы Т.о. первоначальный поиск подстроки проводится по "строчным группам", выявляя предполагаемый список строк, её содержащий... Не дюже загнул? Потом делается запрос к оригиналу, но уже с указанием ИД предполагаемых строк... Понятна идея? Х/з конечно какое там будет ускорение... Но как теория наверно сойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 13:04 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
MasterZivнужно применять, full text search -индексы. Они же R-tree. Они есть в каждой СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 13:05 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
krvsa, Спасибо за идею, сейчас обдумываю (то бишь пока не понял). Данные, котрые могут быть существенны: Кол-во записей в таблице: около 100 000 ( меньше, скорее всего) Кол-во символов в поле : меньше 100 Кол-во символов в алфавите: примерно 100 Кол-во символов в подстроке: меньше 20 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2011, 16:56 |
|
||
|
Поиск подстроки в таблице
|
|||
|---|---|---|---|
|
#18+
x1ca4064сейчас обдумываю (то бишь пока не понял) Хм... Ну вот смотри... У тебя в индекс какой длинны можно значение запихмуть т.с. помаксимуму? У меня только 255 символов вообще на все про все... Ну допустим у тебя их N... Тогда количество строк в "группе" Код: plaintext Т.о. склеиваем поля из К-строк в одно значение и записываем его в первую мою табличку... А ссылки на ИД тех строк - вовторую... Ну и т.д. Теперь поиск. - Получаем подстроку - Ищем её вхождение в моей первой табличке, тем самым получаем набор строк в оригинале - Теперь уточняем в оригинале где таки встречается та подстрока, но уже по нашему перечню ИДшек, а не повсей табличе Вот в этом может и будет выигрыш... Если и теперьне понятно - выкладывай тестовый пример таблички, я покажу на нём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2011, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37085789&tid=1343174]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
190ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 536ms |

| 0 / 0 |
