search with wildcard* (using inverted index)

1 234
I
На сайте с 26.05.2001
Offline
64
#21

1. Смотря что считать быстро.

2. Какой размер оперативной памяти.

3. Какие требования к wildcard, типичные, итд. Знаете ли, ни один алгоритм

по wildcard а.*б.*в.*г.*...я где все буквы русского алфавита и 33 звездочек быстро искать не будут.

4. Ну и потом, посчитайте, что если на реализацию такого алгоритма затратить 2 недели, неделю-другую на отладку довдоку (а может даже больше) Ваша цена в 500 баксов выглядит совсем смешной.

5. подумал, дописал, кстати, если это какое-то критичное приложение, то можно написать распределенную искалку.

tano:
тривиальную..
Дам $500 за реализацию такого алгоритма.
На любом языке, не обязательно си, но чтобы запустить проверить можно было, перл, питон или джава подойдут.
Нужен быстрый поиск с wildcards по словарю из примерно 100-150 миллионов слов.
Набор символов [\x21-\xFF], максимальная длина слова 128 байт, на разбивку на более простые и короткие слова по каким-то границам внутри слова (пробелы,запятые,...) расчитывать не стоит.
Найти нужно все слова в словаре, подходящие под шаблон, желательно (но не обязательно) в отсортированном порядке.
В словарь могут добавляться слова, удаляться не могут - нужно апдейтить индекс без перестройки его с нуля по всему словарю.
Размер индекса критичен, желательно уложиться не более чем еще один размер словаря, время создания индекса - не очень критично.
Очень критично - время поиска и "время поиска первых n результатов подходящих под шаблон"

.

Приходите завтра, завтра будет! (http://itman666.livejournal.com)
I
На сайте с 26.05.2001
Offline
64
#22

.......................

T
На сайте с 28.11.2005
Offline
2
#23
itman:
1. Смотря что считать быстро.
2. Какой размер оперативной памяти.

ну скажем 20ms на Dual Opteron c 4Gb

itman:

3. Какие требования к wildcard, типичные, итд. Знаете ли, ни один алгоритм
по wildcard а.*б.*в.*г.*...я где все буквы русского алфавита и 33 звездочек быстро искать не будут.

если больше двух * - можно во время не вписываться.

itman:

4. Ну и потом, посчитайте, что если на реализацию такого алгоритма затратить 2 недели, неделю-другую на отладку довдоку (а может даже больше) Ваша цена в 500 баксов выглядит совсем смешной.
5. подумал, дописал, кстати, если это какое-то критичное приложение, то можно написать распределенную искалку.
.

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

и уже реализованным во всех поисковиках

а как до дела дошло - ёк :)

I
На сайте с 26.05.2001
Offline
64
#24

в общем, еще раз хотел подчеркнуть, что не видел в жизни (и литературе) ничего сколько-нибудь адекватного для общего решения. ведь, например, суффиксные деревья, над оптимизаци которых бьется весь цивилизованный мир уже много лет, особо не помогут в случае образца а.*е. потому как кат-офф кондишен не будет срабатывать. слов, начинающихся на а - миллионы и почти все они содержат в себе букву е! так что же вернуть юзеру миллион результатов? надо их как-то отранжировать, если много найдено. это другая сложность. вот и получается, что задача в любом случае поставлена некорректно.

K
На сайте с 11.11.2005
Offline
12
#25
tano:

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

Если это намек на меня, то я попросил бы читать внимательнее. Привожу фрагмент своего постинга:

Kryukov:
был нужен полноценный regexp - тады только перебор . Если же просто найти все с произвольным окончанием - то задача для студента 2 курса.

Более ничего я не говорил. По сути дела я полностью согласен с itman по поводу реализации в общем виде :) и об этом тоже писал. Можно попробовать другой метод, может Вы опишите (хотя бы в общем) зачем и где (в каких условиях) эта штуковина должна работать. Возможно тогда что-то будет можно сказать или предложить.

Если вы будете следовать инструкциям, то каждое блюдо будет получаться у вас таким же, как и у нас, даже если раньше вы никогда не занимались приготовлением пищи. Поваренная книга Мак-Колла и эпиграф Д. Кнута (http://www.turtle.ru/)
T
На сайте с 28.11.2005
Offline
2
#26
Kryukov:
Если это намек на меня, то я попросил бы читать внимательнее. Привожу фрагмент своего постинга:

нет, я о том что обсуждали в этом топике до меня

I
На сайте с 26.05.2001
Offline
64
#27

за такое время на такой железке, с такой памятью стандартные инвертированный файл не справится, или справится едва-едва.

к тому же, имхо, здесь важно не сколько там есть звездочек, а какая длина подстрок без wildcard. сами, посудите какова фильтруаящая способность, скажем, триграммы относительно массива слов длинной 128 символов количеством 13 млн. я думаю, что будет очень хорошо, если на такой железке вам удастся уложить поиск в несколько секунд.

tano:
ну скажем 20ms на Dual Opteron c 4Gb
если больше двух * - можно во время не вписываться.
да там чуть выше спецы такой алгоритм тривиальным обозвали :)
и уже реализованным во всех поисковиках
а как до дела дошло - ёк :)
[Удален]
#28
tano:
ну скажем 20ms на Dual Opteron c 4Gb
если больше двух * - можно во время не вписываться.
да там чуть выше спецы такой алгоритм тривиальным обозвали :)
и уже реализованным во всех поисковиках
а как до дела дошло - ёк :)

tano, а какова примерно средняя длина слова? И каков допустимый максимальный объем всего индекса?

T
На сайте с 28.11.2005
Offline
2
#29
Interitus:
tano, а какова примерно средняя длина слова?

сейчас 15, может со временем расти, до 20-30

128 - это максимально возможная длина

Interitus:
И каков допустимый максимальный объем всего индекса?

Желательно - данные+индекс уложить в 2 размера данных в plain формате, можно превысить. Решения с 128*размер данных не проходят.

I
На сайте с 26.05.2001
Offline
64
#30

Ууупс... Вы путаетесь в показаниях, если максимальная длина слова 15, то размер данных ну уж никак не 13 гигов. Опять-таки, какая средня длина, порядка 10 я думаю?

tano:
сейчас 15, может со временем расти, до 20-30
128 - это максимально возможная длина
Желательно - данные+индекс уложить в 2 размера данных в plain формате, можно превысить. Решения с 128*размер данных не проходят.
1 234

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