0

我正在构建一个相当大的数据库,其中将有很多包含各种数据的表。

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

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

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

例如,我认为它可能有这样的字段,

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

这样我认为它会执行更快的搜索,还是我完全错了?

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

4

2 回答 2

0

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

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

我过去曾在我的项目中使用过 xapian ,对此我感到非常满意。LuceneSolr弹性搜索是其他一些非常受欢迎的项目,可能会满足您的需求。

于 2013-08-14T23:56:10.423 回答
0

不要使用 MySQL 来连接很多表,我建议你看看Apache SolrRDBMS

于 2013-08-14T23:14:43.343 回答