【发布时间】:2010-04-30 14:12:31
【问题描述】:
我有三个表,所有表都有一个带有全文索引的列。用户将搜索词输入到单个文本框中,然后将搜索所有三个表。
用一个例子更好地解释:
documents
doc_id
name FULLTEXT
table2
id
doc_id
a_field FULLTEXT
table3
id
doc_id
another_field FULLTEXT
(我意识到这看起来很愚蠢,但那是因为我删除了所有其他字段和表格以简化它)。
所以基本上我想对name、a_field 和another_field 进行全文搜索,然后将结果显示为documents 的列表,最好是导致找到该文档的原因,例如如果another_field 匹配,我会显示another_field 是什么。
我开始研究一个系统,通过该系统执行三个全文搜索查询并将结果插入到具有如下结构的表中:
search_results
table_name
row_id
score
(稍后可以使用例如搜索词的散列将结果缓存几天)。
这个想法有两个问题。第一个是同一文档在搜索结果中最多可以出现 3 次不同的分数。相反,如果搜索词在两个表中匹配,它应该有一个结果,但得分更高。
第二个是解析结果很困难。我想显示一个文档列表,但如果没有某种连接,我不会立即知道doc_id;但是要加入的表取决于table_name 列,我不确定如何完成。
想要像这样搜索多个相关表一定是很常见的事情,所以我想我要问的是我是否以正确的方式处理这个问题?谁能告诉我最好的方法。
【问题讨论】: