2013-09-29 85 views
2

我有一個搜索查詢女巫根據該詞在文章中使用了多少次來排序結果。例如標題中的1次和內容中的1次。這篇文章將在列表中高於僅包含內容區域的文章。 但是我想要一點額外的,是否可以添加乘數,例如當在標題中使用該術語時,它將計算2而不是1。看看下面的代碼:在排名搜索查詢中指定排名PHP,MySQL

<?PHP 

//SET THE SEARCH TERM 
$term = "Search Term"; 

$sql = "SELECT *, MATCH(subject, message,reference,textbody) AGAINST('". $term ."') as score FROM pages WHERE MATCH (subject, message,reference,textbody) AGAINST('". $term ."') ORDER BY score DESC"; 
$query = mysql_query($sql); 

//BUILD A LIST OF THE RESULTS 
while($result = mysql_fetch_assoc($query)) { 
    // your stuff for showing result 
} 
?> 

你能幫我嗎?

+0

爲每個術語執行單獨的查詢,例如主題,消息並對它們進行聯合。並添加分數+ 1,2,3你想要的! –

+0

我怎樣才能讓他們的聯盟你有我的例子嗎? –

回答

1

只需添加+1它像

$sql = "SELECT *, MATCH(subject, message,reference,textbody) AGAINST('". $term ."')+1 as score 
      FROM pages ORDER BY score DESC"; 
1

MySQL的MATCH函數不具備加權領域的功能。您必須在要增加權重的字段上創建單獨的全文索引,然後使用單獨的MATCH()表達式針對全文索引計算相關性。

SELECT *, 
    MATCH(subject) AGAINST('". $term ."') * 2 AS score_s /* 2x weight */ 
    MATCH(subject, message, reference, textbody) AGAINST('". $term ."') AS score 
FROM pages 
WHERE 
    MATCH(subject, message, reference, textbody) AGAINST('". $term ."') 
ORDER BY score_s + score DESC 

MySQL的內置全文搜索真的不是很靈活。

對於搜索大型數據集,這些其他工具也經常快得多。請參閱我的演示文稿Fulltext Search Throwdown進行比較。

+0

Jac Engels:這是你的答案:) +1 @ Bill Karwin。我是你的粉絲,你回答MySQL問題的方式確實很棒:) –

+1

@HardikThaker,謝謝!我很高興幫助人們瞭解MySQL並在他們的項目中取得更大的成功。 –