MATCH ...AGAINST
返回一個數字,和MySQL記得where子句的結果,所以如果你有1臺3個獨立的FT-指標,你可能只是做一個:
SELECT * FROM tablename WHERE
MATCH (title) AGAINST('search')
OR MATCH (headings) AGAINST('search')
OR MATCH (content) AGAINST('search')
ORDER BY
(MATCH (title) AGAINST('search') * 3) +
(MATCH (headings) AGAINST('search') * 2) +
MATCH (content) AGAINST('content') DESC
或任何的權重可能需要。
或者,在布爾模式,同一個表,你可以使用:
SELECT * FROM tablename WHERE
MATCH (title) AGAINST('>>>search' IN BOOLEAN MODE)
OR MATCH (headings) AGAINST('>>search' IN BOOLEAN MODE)
OR MATCH (content) AGAINST('>search' IN BOOLEAN MODE)
ORDER BY
MATCH (title) AGAINST('>>>search' IN BOOLEAN MODE) +
MATCH (headings) AGAINST('>>search' IN BOOLEAN MODE) +
MATCH (content) AGAINST('>search' IN BOOLEAN MODE)
對於需要在搜索關鍵詞的搜索,同樣的技巧:
MATCH (title) AGAINST('+>>>search' IN BOOLEAN MODE)
如果你有3個獨立的表,必須在某個地方存儲重量,無論是在某個JOIN中,還是通過單獨的查詢(但現在都是這樣):
SELECT *, MATCH (title) AGAINST('+>>>search' IN BOOLEAN MODE) as weight
FROM title
WHERE MATCH (title) AGAINST('+>>>search' IN BOOLEAN MODE)
SELECT *, MATCH (headings) AGAINST('+>>search' IN BOOLEAN MODE) as weight
FROM headings
WHERE MATCH (headings) AGAINST('+>>search' IN BOOLEAN MODE)
SELECT *, MATCH (content) AGAINST('+search' IN BOOLEAN MODE) as weight
FROM content
WHERE MATCH (content) AGAINST('+search' IN BOOLEAN MODE)
利用工會是第三情況下(具有3個獨立的表)的方式 – re1man
偉大的答案:)你在做和如何加入做什麼更好的辦法 – re1man
也許,要看情況。在這種情況下,您很可能會想要使用第二個示例中的ORDER BY子句。 – Wrikken