Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск подстроки в таблице / 8 сообщений из 8, страница 1 из 1
28.01.2011, 11:20
    #37083775
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
Hi, All!

Задача:

Есть таблица с текстовым полем. Таблица меняется редко относительно поиска в ней. Хочется быстро находить записи, содержащие заданную подстроку. Т.к. подстрока может быть не только в начале текста, LIKE не будет эффективным.

Какие алгоритмы посоветуете?
...
Рейтинг: 0 / 0
28.01.2011, 11:42
    #37083846
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
x1ca4064 , если "подстроки" имеют вполне определённые назначение - можно сделать индекс по ним... Или таблички типа

ПодстрокаКодЗначение
Строки содержащие подстрокуКодИД строки
...
Рейтинг: 0 / 0
28.01.2011, 11:49
    #37083879
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
krvsa,

Нет, подстрока произвольна.
...
Рейтинг: 0 / 0
28.01.2011, 12:51
    #37084051
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
On 28.01.2011 11:20, x1ca4064 wrote:

> Какие алгоритмы посоветуете?

Какие ещё алгоритмы ? Полнотектовый поиск
нужно применять, full text search -индексы.
Они же R-tree.



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.01.2011, 13:04
    #37084085
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
x1ca4064 , насколько "длинна" и "широка" та табличка?

Как вариант, предложил бы такой способ... Сделать некий "индекс" или опять же таблички такого вида:
- Значения полей строки просто склеиваются через некий разделитель
- Такие строки так же склеиваются в одну строку через еще один разделитель (количество строк ограничено конечно)
- Вся эта "каша" "порционально" записывается со ссылками на строки, в неё входящие

Строчная группаКодЗначение
Строки первоначальной таблицыКодИД строкиКод группы
Т.о. первоначальный поиск подстроки проводится по "строчным группам", выявляя предполагаемый список строк, её содержащий... Не дюже загнул?
Потом делается запрос к оригиналу, но уже с указанием ИД предполагаемых строк...

Понятна идея?
Х/з конечно какое там будет ускорение... Но как теория наверно сойдёт.
...
Рейтинг: 0 / 0
28.01.2011, 13:05
    #37084089
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
MasterZivнужно применять, full text search -индексы.
Они же R-tree.
Они есть в каждой СУБД?
...
Рейтинг: 0 / 0
28.01.2011, 16:56
    #37084924
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
krvsa,

Спасибо за идею, сейчас обдумываю (то бишь пока не понял).

Данные, котрые могут быть существенны:

Кол-во записей в таблице: около 100 000 ( меньше, скорее всего)

Кол-во символов в поле : меньше 100

Кол-во символов в алфавите: примерно 100

Кол-во символов в подстроке: меньше 20
...
Рейтинг: 0 / 0
29.01.2011, 10:47
    #37085789
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск подстроки в таблице
x1ca4064сейчас обдумываю (то бишь пока не понял)
Хм...
Ну вот смотри... У тебя в индекс какой длинны можно значение запихмуть т.с. помаксимуму? У меня только 255 символов вообще на все про все...

Ну допустим у тебя их N... Тогда количество строк в "группе"

Код: plaintext
К=N/ 100 

Т.о. склеиваем поля из К-строк в одно значение и записываем его в первую мою табличку... А ссылки на ИД тех строк - вовторую... Ну и т.д.

Теперь поиск.
- Получаем подстроку
- Ищем её вхождение в моей первой табличке, тем самым получаем набор строк в оригинале
- Теперь уточняем в оригинале где таки встречается та подстрока, но уже по нашему перечню ИДшек, а не повсей табличе
Вот в этом может и будет выигрыш...

Если и теперьне понятно - выкладывай тестовый пример таблички, я покажу на нём.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поиск подстроки в таблице / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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