2012-05-17 19 views
1

這是我的查詢:MySQL全文搜索:如何找出搜索查詢在哪個列中找到的?

$sql = "SELECT * 
      MATCH(textEN,textDE,textPT,titlePT,titleDE,titleEN) AGAINST('$search') AS score 
      FROM $main_db.ff_pages 
     WHERE MATCH(textEN,textDE,textPT,titlePT,titleDE,titleEN) AGAINST('$search') 
     ORDER BY score DESC"; 

,一切工作正常。正如你所看到的,我有一個多語言的網站,這就是爲什麼我需要知道在哪個列中搜索到的表達式。例如,爲了在搜索結果中顯示英文版網站,我想知道在「textEN」列中找到了「太陽系」這個表達式。

有沒有辦法做到這一點?

+2

如果有多個匹配? –

+0

然後我想知道它的每場比賽... – jonas23

+0

沒有人知道答案嗎? – jonas23

回答

0

我認爲你將不得不爲每一列單獨執行MATCH() ... AGAINST(儘管這樣做的好處之一是你可以量化每列對總分的貢獻)。

以MySQL的相關度分數和其確定性函數cacheing的疊加性質最大的優勢,我會做:

SELECT *, 
     MATCH(textEN) AGAINST('$search') AS score_textEN, 
     MATCH(textDE) AGAINST('$search') AS score_textDE, 
     MATCH(textPT) AGAINST('$search') AS score_textPT, 
     MATCH(titleEN) AGAINST('$search') AS score_titleEN, 
     MATCH(titleDE) AGAINST('$search') AS score_titleDE, 
     MATCH(titlePT) AGAINST('$search') AS score_titlePT, 
FROM  $main_db.ff_pages 
WHERE MATCH(textEN) AGAINST('$search') 
     OR MATCH(textDE) AGAINST('$search') 
     OR MATCH(textPT) AGAINST('$search') 
     OR MATCH(titleEN) AGAINST('$search') 
     OR MATCH(titleDE) AGAINST('$search') 
     OR MATCH(titlePT) AGAINST('$search') 
ORDER BY score_textEN + score_textDE + score_textPT 
     score_titleEN + score_titleDE + score_titlePT DESC