全文搜索许多表

时间:2010-04-30 14:12:32

标签: mysql full-text-search

我有三个表,所有表都有一个带有全文索引的列。用户将在单个文本框中输入搜索词,然后搜索所有三个表。

通过示例更好地解释了这一点:

documents
  doc_id
  name FULLTEXT

table2
  id
  doc_id
  a_field FULLTEXT

table3
  id
  doc_id
  another_field FULLTEXT

(我意识到这看起来很愚蠢,但那是因为我已经删除了所有其他字段和表格来简化它。)

所以基本上我想在namea_fieldanother_field上进行全文搜索,然后将结果显示为documents的列表,最好是由什么引起的要找到的那份文件,例如如果another_field匹配,我会显示another_field是什么。

我开始研究一个系统,通过该系统执行三个全文搜索查询,并将结果插入到具有以下结构的表中:

search_results
  table_name
  row_id
  score

(稍后可以使用例如搜索词的哈希值来缓存几天的结果。)

这个想法有两个问题。首先,同一文档可以在搜索结果中最多三次,得分不同。相反,如果搜索词在两个表中匹配,则应该有一个结果,但得分更高。

第二是解析结果很困难。我想显示一份文件清单,但如果没有某种联合,我不会立即知道doc_id;但是要加入的表依赖于table_name列,我不知道如何实现。

想要搜索这样的多个相关表必须是常见的事情,所以我想我问的是我是否以正确的方式接近这个?有人可以告诉我最好的方法。

1 个答案:

答案 0 :(得分:1)

我会创建一个非规范化的单个索引。即,将所有三种文档类型放入一个表中,其中包含doc_id,doc_type和单个全文块的字段。然后,您可以一次搜索所有三种文档类型。

您可能还会发现Lucene在这种情况下会有意义。它为您提供了更快的搜索速度,以及有关搜索和评分工作方式的更多功能。

缺点是你要为每条记录保留一份单独的非文本副本。好处是搜索速度要快得多。