Как искать ключевое слово в 100 миллиардах постов? - PullRequest
6 голосов
/ 04 сентября 2010

Это проект колледжа:

У меня есть база данных (mysql или postgresql не имеет значения) со 100 миллиардами сообщений, и мне нужно найти (как можно быстрее) общее ключевое слово.

Каждый пост содержит 500-1000 ключевых слов.

Это не только проблема с базой данных, но и проблема с программным обеспечением (для индексации или других).

Как я могу это сделать?

Я мог бы использовать некоторые продвинутые технологии поиска, но я не знаю, какие именно.

Ответы [ 8 ]

13 голосов
/ 04 сентября 2010

Рассматривали ли вы использование Apache Lucene ?

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

Однако я не знаю, сколько дополнительного пространства потребуется и сколько времени на это потребуется.

10 голосов
/ 04 сентября 2010

Продайте «100 миллиардов» почтовых данных в Google. :)

Они бесплатно проиндексируют его для вас , и вы заработаете деньги.

5 голосов
/ 04 сентября 2010

Ну, на планете около 6,8 миллиарда человек, которые могут читать примерно 1 пост в минуту (в среднем).

Если каждый внесет свой вклад, 100 миллиардов, поделенные на 6,8 миллиарда, - это 14,7 минуты, чтобы прочитать все сообщения.

Итак:

1) Завоевать Землю.
2) Сделай всех своим рабом.
3) Публикуйте сообщения.
4) ???
5) Прибыль!

4 голосов
/ 04 сентября 2010

Попробуйте Сфинкс http://sphinxsearch.com/

4 голосов
/ 04 сентября 2010

Возможно, вы захотите проверить Сфинкс .Это механизм полнотекстового поиска, который обрабатывает распределенные индексы.Вы можете разместить части данных на многих компьютерах.И запрос одного сервера может отправить запрос на другие серверы и собрать результаты с каждого.Он имеет довольно хорошую скорость, но вы, вероятно, не можете сделать 100 миллиардов сообщений на одной машине.

Вы, вероятно, не сможете сделать что-то подобное в MySQL или Postgresql.Несмотря на то, что вы можете хранить все данные, MySQL и Postgres не хватает полнотекстовой индексации и скорости поиска, которую принесет вам настоящий полнотекстовый индекс.

В MySQL есть способ компиляции для поддержки механизма хранения Sphinx, который, хотя данные будут по-прежнему храниться в Sphinx отдельно от MySQL, по-прежнему можно запрашивать в поисковой системе Sphinx, используя все, что подключается к MySQL,а также выполнять соединения с другими таблицами, которые находятся в вашей базе данных MySQL.Однако, если вы просто хотите выполнить простой поиск по документам и не требует объединения с другими данными, вы можете просто использовать собственный интерфейс PHP.

3 голосов
/ 04 сентября 2010

Используйте Google Custom Search.Кроме того, вы немного заработаете и сэкономите много ресурсов хостинга.

3 голосов
/ 04 сентября 2010

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

1 голос
/ 04 сентября 2010

Прежде всего, мы говорим о ключевых словах в отдельных полях или в содержимом сообщения?

Если отдельные поля, это вроде ОК. Просто создайте таблицу со связями ключевое слово-пост и выполните простой поиск по SELECT post_id 7 ... WHERE keyword = 'X'.

Если мы говорим о полнотекстовой индексации, вам лучше использовать какое-либо специальное программное обеспечение для индексирования, например, предложенное в некоторых других публикациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...