构建大型数据库的搜索引擎

时间:2013-08-14 23:11:24

标签: mysql sql

我正在构建一个相当大的数据库,我将拥有大量包含各种数据的表。

但是每个表都有类似的字段,例如视频标题或曲目标题。

现在我面临的问题是如何构建一个查询,该查询会在五个或更多表中查找关键字匹配,请记住,每个表可能有100k到100万行,或者在某些情况下甚至可能有几百万行行。

我认为对每个表使用连接或单独的查询会非常慢,所以我想到的是创建一个单独的表来存储搜索数据。

例如,我认为它可能包含这些字段,

id ---- username ---- title ---- body ---- date ---- belongs_to ---- post_id

这种方式我觉得搜索速度会快得多,或者我完全错了?

我能想到的这种方法的唯一问题是管理这个表很难,因为如果删除了某些表中的原始记录,我还需要从'search'表中删除记录

2 个答案:

答案 0 :(得分:0)

不要使用MySQL加入很多表格,我建议您使用Apache Solr

来查看RDBMS

答案 1 :(得分:0)

看看一些信息检索系统。它们还需要自己的索引,因此您需要在每次更新后(或以固定间隔)索引数据,以使搜索索引保持最新。但它们具有以下优点:

  • 要快得多,因为它们使用专为此目的而设计的特殊算法和数据结构
  • 根据一组术语搜索文档的能力(也可能是一组不得出现在结果中的否定词)
  • 搜索短语(即以特定顺序彼此出现的词语)
  • 自动阻止(即剥离诸如“s”,“ed”,“ing”等词语的结尾...)
  • 检测拼写错误(即“你的意思是......?”)
  • 停止词汇以避免索引真正常见的无意义词(“a”,“the”等)
  • 通配符查询
  • 高级排名策略(即按相关性排名,基于每次搜索字词的数量和位置)

我过去曾使用xapian作为我的项目,我对它非常满意。 LuceneSolrelastic search是其他一些非常受欢迎的项目,可能符合您的需求。