search with wildcard* (using inverted index)

123 4
T
На сайте с 28.11.2005
Offline
2
#11
Keva:
За 3000 сделаю... За меньше лениво...

За proof of concept "тривиального" алгоритма - дорого.

K
На сайте с 27.11.2000
Offline
80
#12
tano:
За proof of concept "тривиального" алгоритма - дорого.

Ну что ж, тут как в анекдоте :) Пройдись по базару, посмотри, может, где дешевле :)

С уважением, Андрей Коваленко aka Keva
T
На сайте с 28.11.2005
Offline
2
#13
Keva:
Ну что ж, тут как в анекдоте :) Пройдись по базару, посмотри, может, где дешевле :)

сам сделаю, в общем уже понятно как оно должно работать

K
На сайте с 27.11.2000
Offline
80
#14
tano:
сам сделаю, в общем уже понятно как оно должно работать

Это правильно!

Для начала определись с тем, что ты будешь ставить в соответствие поисковому ключу.

Потом реши, как будешь организовывать хранилище ключей.

Возможно, в узлах должны храниться какие-то характеристики, общие для вложенных узлов (в случае хранения как дерево).

K
На сайте с 11.11.2005
Offline
12
#15
Keva:
Это правильно!
Для начала определись с тем, что ты будешь ставить в соответствие поисковому ключу.
Потом реши, как будешь организовывать хранилище ключей.
Возможно, в узлах должны храниться какие-то характеристики, общие для вложенных узлов (в случае хранения как дерево).

Ой-й-й-й, тут кажись граничные условия не ставили, а вдруг челу был нужен полноценный regexp - тады только перебор :). Если же просто найти все с произвольным окончанием - то задача для студента 2 курса. Главное городить самому особо ничего не надо, берем BerkeleyDB v.1.85 (она не коммерческая), строим BTREE. Для поиска используем установку курсора на первое соответствующее, далее перебором со сравнением на превышение. Таким образом еще в 1982 году работал SMTP агент, под названием IDA Sendmail (почти обычный сендмаил, но с использованием шаблонов для подмены адресов и прочими "дырявыми" бантиками) Легкий тормоз будет обнаружен на шаблонах типа "a*", в остальном - свистит как пулемет. :)

Если это то, что нада - готов получить свои $500 с фрагментом реализации из рамблера образца 1996г.

Если вы будете следовать инструкциям, то каждое блюдо будет получаться у вас таким же, как и у нас, даже если раньше вы никогда не занимались приготовлением пищи. Поваренная книга Мак-Колла и эпиграф Д. Кнута (http://www.turtle.ru/)
T
На сайте с 28.11.2005
Offline
2
#16
Kryukov:
Ой-й-й-й, тут кажись граничные условия не ставили, а вдруг челу был нужен полноценный regexp - тады только перебор :). Если же просто найти все с произвольным окончанием - то задача для студента 2 курса. Главное городить самому особо ничего не надо, берем BerkeleyDB v.1.85 (она не коммерческая), строим BTREE. Для поиска используем установку курсора на первое соответствующее, далее перебором со сравнением на превышение. Таким образом еще в 1982 году работал SMTP агент, под названием IDA Sendmail (почти обычный сендмаил, но с использованием шаблонов для подмены адресов и прочими "дырявыми" бантиками) Легкий тормоз будет обнаружен на шаблонах типа "a*", в остальном - свистит как пулемет. :)
Если это то, что нада - готов получить свои $500 с фрагментом реализации из рамблера образца 1996г.

а на шаблонах типа "*ll*wo*" для поиска "helloworld" какой тормоз будет ? :)

реально через suffix array решается, может что-то более эффективное есть, я не знаю.

K
На сайте с 11.11.2005
Offline
12
#17
tano:
а на шаблонах типа "*ll*wo*" для поиска "helloworld" какой тормоз будет ? :)
реально через suffix array решается, может что-то более эффективное есть, я не знаю.

Ну хорошо :) ну а на шаблоне типа "*" для поиска "бабушка" наверное будет еще хуже :) . Вы же всетаки что-то знаете о том, что ищите. Если плохо знаете - то уж

grep -i [regexp] везде

работать будет долго, но надежно. Окружающий мир все равно является поиском компромисов - хотим того или нет. Обычно можно (в 90%)сформулировать некоторые допустимые ограничения на синтаксис, дабы не терять производительность - например, построить 2 индекса, перевернув во втором слова. Полного решения не даст (и думаю в общем случае задача плохо выполнима)

Кстати, можно представить сколько мусора Вы соберете на многомиллионной базе слов по Вашей маске - разгребать дольше будете

Короче, я же написал - смотря что надо :) Кстати, 100 млн массив слов по 128 символов - это 1GB (в современных условиях в мозги влезет вместе с доп. информацией)

T
На сайте с 28.11.2005
Offline
2
#18
Kryukov:
Ну хорошо :) ну а на шаблоне типа "*" для поиска "бабушка" наверное будет еще хуже :) . Вы же всетаки что-то знаете о том, что ищите. Если плохо знаете - то уж
grep -i [regexp] везде

для * даже grep не нужен - head достаточно

а grep - это и есть тривиальное решение за 3000 - выделенный сервер поставить :)

Kryukov:

Кстати, 100 млн массив слов по 128 символов - это 1GB (в современных условиях в мозги влезет вместе с доп. информацией)

13Gb

K
На сайте с 27.11.2000
Offline
80
#19
Kryukov:
...готов получить свои $500 с фрагментом реализации из рамблера образца 1996г.

Димыч, понимаешь, тут ить еще и проблема вычитывания индекса стоит... А это уже чуток другие объемы!

K
На сайте с 11.11.2005
Offline
12
#20
tano:
для * даже grep не нужен - head достаточно
а grep - это и есть тривиальное решение за 3000 - выделенный сервер поставить :)
13Gb

Упс... пардон, нули считать разучился :)... Про grep я образно (кстати в быту молодости видал реляционную субд с классическим функционалом, включая простенький SQL, исполненную исключительно на grep, awk и иже с ними. Во как в жизни бывает :) )

keva:
Димыч, понимаешь, тут ить еще и проблема вычитывания индекса стоит... А это уже чуток другие объемы!

Ладно, уболтал, не буду сшибать расценки. Три, так три

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий