我正試圖在一個對一對多關係的兩個表上實現搜索功能。把它想象成後與多個標籤。每個標籤在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