我有三个表,所有表都有一个带有全文索引的列。用户将在一个文本框中输入搜索条件,然后搜索所有三个表。在许多表上全文搜索
这是更好地用一个例子解释:
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
(这可以在以后缓存结果做了几天例如搜索项的散列)。
这个想法有两个问题。首先是同一文件可以在搜索结果中以不同的分数进行三次。相反,如果搜索词在两个表中匹配,它应该有一个结果,但得分较高。
第二个是解析结果很困难。我想显示一个文件列表,但我不立即知道doc_id
没有加入某种类型;但是加入的表依赖于table_name
列,我不确定如何完成此操作。
想要像这样搜索多个相关的表必须是一个普通的事情,所以我想我问的是我以正确的方式接近这个?有人可以告诉我这样做的最好方法吗?
我认为这不合适。例如,table2是一个树形结构,每个条目都有一个父ID,每个文档将有一个树中有多达20-30个条目。我无法将这些数据真的放在文档表中。但我希望它被搜索,如果找到匹配,结果中显示相应的文档。 – Rob 2010-04-30 14:51:33
索引不是您的数据库表。这是一个单独的非规范化副本,仅用于快速搜索。 – 2010-05-18 01:56:25