вопрос про inverted index

ark21

есть задача, чем-то похожая на search
Детали излагать не могу, но попробую перефразировать в терминологии поиска
из большого числа документов быстро (секунды) выбрать 10 любых, которые удовлетворяют условию, например такому
(keyword1 or keyword2 or keyword3) and (keyword4 or keyword5 or keyword6)
Насколько я понимаю, такие задачи решаются построением inverted index
keyword => document ids
Если каждый список document ids отсортирован, то можно параллельно читать 6 списков, искать на ходу пересечение, и как только нашли 10 - остановиться. При этом нужно использовать компрессию, чтобы считывать меньше данных в среднем
Если делать так, то с компрессией полный размер индекса будет около 600GB, и вроде машин для этого понадобится больше одной.
Собственно вопрос в том, какие технологии использовать, чтобы облегчить себе жизнь и не писать это с нуля. Наверняка человечество как-то продвинулось в этом вопросе.
upd. речь именно про использование уже построенного индекса

erotic

Раз ты смог посчитать размер, может быть можешь сказать, сколько документов, средняя длина документа, количество разных слов?

hwh2010

Наверняка человечество как-то продвинулось в этом вопросе.
я бы попробовал sphinx

ark21

по порядку разных слов 100 миллионов, каждое слово в среднем в 3000 документах, но распределение неровное - много слов содержатся только в одном документе, некоторые слова в миллионе. Чаще будут искать популярные слова. Всего документов миллиард, по 300 слов в среднем
выражение поиска чаще всего содержит десятки keywords, условно говоря до 100, но иногда бывает немного больше.
Оставить комментарий
Имя или ник:
Комментарий: