我正试图在一个对一对多关系的两个表上实现搜索功能。把它想象成后与多个标签。每个标签在tag
表中都有自己的行。MySQL全文搜索:一对多关系
我想找回后,如果所有的搜索词可以发现无论是)的后文,二)后标签或c)都。
比方说,我已经建立了我的表是这样的:
CREATE TABLE post (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
text VARCHAR(100) NOT NULL
);
CREATE TABLE tag (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
post MEDIUMINT NOT NULL
);
我创建索引这样的:
CREATE FULLTEXT INDEX post_idx ON post(text);
CREATE FULLTEXT INDEX tag_idx ON tag(name);
如果我的搜索查询是“特玛TermB”,并希望搜索只是在文章中,我会制定我的SQL查询是这样的:
SELECT * FROM post WHERE MATCH(text) AGAINST('+TermA +TermB' IN BOOLEAN MODE);
有没有添加标签的方法?我以前的尝试是这样的:
SELECT * FROM post
RIGHT JOIN tag ON tag.post = post.id
WHERE MATCH(post.text) AGAINST('TermA TermB' IN BOOLEAN MODE)
OR MATCH(tag.name) AGAINST('TermA TermB' IN BOOLEAN MODE);
的问题是,这仅仅是一个任何话查询,而不是一个所有单词查询。我的意思是,如果TermA在文本中,TermB在标签中,我想检索该文章。
我在这里错过了什么?这甚至可以使用全文搜索?有没有更好的方法来解决这个问题?
我试过了。唯一的问题是,如果只有一个条款在帖子文本中,并且没有任何条款在标签中,它仍然匹配。我需要它是一个**和**。 – musicnothing
它在MATCH(post.text)中未找到+。测试更新的查询。 –
现在它只匹配两个词都在文本中,并且两个词都在标签中。我需要的是在文本,标签或两者中找到所有术语。就像TermA在文本中,但TermB在标签中。 – musicnothing