如何在100亿条帖子中搜索关键字?

时间:2010-09-04 12:00:37

标签: mysql database postgresql

这是一个大学项目:

我有一个数据库(mysql或postgresql没关系)有1000亿个帖子,我需要搜索(尽可能快)一个通用关键字。

每篇文章都有500-1000个关键字。

这不仅是数据库问题,还是软件(用于索引或其他)问题。

我该怎么做?

我可以使用一些先进的搜索引擎技术,但我不知道哪个。

8 个答案:

答案 0 :(得分:13)

您是否考虑过使用Apache Lucene

这不直接与您的SQL数据库直接相关,您必须编写一些代码来将文档提供到其中,以便构建和索引然后可以查询的内容。

我不知道需要多少额外空间以及需要多长时间。

答案 1 :(得分:10)

向Google出售“1000亿”的帖子数据。 :)

他们将为您免费索引,您将赚钱。

答案 2 :(得分:5)

嗯,这个星球上有大约68亿人,每分钟可以阅读约1个帖子(平均而言)。

如果每个人都有所贡献,那么1000亿分红,除去68亿,所有帖子的阅读时间为14.7分钟。

所以:

1)征服地球 2)让每个人成为你的奴隶 3)阅读帖子。
4)??? 5)利润!

答案 3 :(得分:4)

您可能想查看Sphinx。它是一个处理分布式索引的全文搜索引擎。您可以将部分数据分布在许多计算机上。查询单个服务器可以将查询发送到其他服务器,并从每个服务器收集结果。它的速度非常快,但你可能无法在一台机器上完成1000亿个帖子。

你可能无法在MySQL或Postgresql中做这样的事情。虽然您可以存储所有数据,但MySQL和Postgres缺少真正的全文索引将为您带来的全文索引和搜索速度。

MySQL有一种编译方式可以支持Sphinx存储引擎,虽然数据仍然存储在与MySQL不同的Sphinx中,但您仍然可以使用连接到MySQL的任何东西查询Sphinx搜索引擎,并执行连接到MySQL数据库中的其他表。但是,如果您只想对文档执行简单搜索,并且不需要加入其他数据,则可以使用本机PHP界面。

答案 4 :(得分:4)

答案 5 :(得分:3)

您是否尝试过数据库的内置全文索引功能?你应该尝试一下,并在你认为它不适合并寻找别的东西之前证明它不起作用。

答案 6 :(得分:3)

使用Google自定义搜索。此外,您将获得一点点收入,并节省大量的托管资源。

答案 7 :(得分:1)

首先,我们是在单独的字段或帖子内容中讨论关键字吗?

如果是单独的字段,则可以。 只需构建一个包含关键字 - 帖子关系的表,并在SELECT post_id 7上进行简单搜索... WHERE keyword ='X'。

如果我们谈论的是全文索引,那么最好使用一些自定义索引软件,例如其他一些帖子中建议的。