我有一系列表格,其中包含我想要全文搜索的数据。我已尝试将表与UNION
组合在一起,但结果会丢失其全文索引,因此无法进行全文搜索。我不认为将数据放入临时表是可行的方法。有道理我可以全文搜索这些表吗?提前谢谢!
更新: 我对全文的查询是
SELECT ID, Title, Description, Author, MATCH (Title,Tags,Body) AGAINST ("search terms") AS Relevance
FROM [combination of tables goes here]
WHERE MATCH (Title,Tags,Body) AGAINST ("search terms")
答案 0 :(得分:12)
MySQL无法在多个表中创建全文(或任何)索引。因此,使用单个索引即可。
作为替代方案,您可以:
在每个表上使用索引,并根据需要使用联接/联合来检索符合您要求的行。
创建聚合表以将索引应用于。
使用lucene或solr等工具提供搜索索引。 (如果您选择任何规模,这可能是最好的选择)
答案 1 :(得分:3)
将相关性分数加在一起:
SELECT ID, Title, Description, Author,
MATCH (Title) AGAINST ("search terms") +
MATCH (Tags) AGAINST ("search terms") +
MATCH (Body) AGAINST ("search terms")
AS Relevance
答案 2 :(得分:2)
简单地做:
select * from table a where a.col=myval
union
select * from table b where b.col=myval
..
索引与普通选择一起使用。
答案 3 :(得分:1)
你的设置似乎是一种留言板,我假设你有三张桌子(如果我错了,请纠正我):
我将如何做到这一点
SELECT Message.Message_ID, Message.Title, Message.Description, Message.Author,
IFNULL(
MATCH (Name)
AGAINST (?)
,
IFNULL(
MATCH (Message.Title)
AGAINST (?)
,
MATCH (Message.Body)
AGAINST (?)
)
) AS Relevance
FROM Message, Tag, Message_Tag
WHERE Message.Message_ID = Message_Tag.Message_ID AND Message_Tag.Tag_ID = Tag.Tag_ID
AND (
MATCH (Name)
AGAINST (?)
OR
MATCH (Message.Title)
AGAINST (?)
OR
MATCH (Message.Body)
AGAINST (?)
)