2012-01-27 321 views
-1

我是新來的php和mysql。在我的項目中,我必須開發多個關鍵字多個關鍵字的搜索引擎,並且還需要關鍵字排名和相關性。php搜索引擎關鍵詞排名

例如,如果我有三個單詞嗨,你好,嘿,並希望搜索字段,如主題,消息,參考,textbody。在這種情況下,具有更多關鍵字排名的行將排在第一位,排名最低的行排在最後。任何人都會指導我如何實現這樣的搜索引擎。我的數據庫大約有400萬,並且正在迅速增長。

回答

1

使用全文搜索:

<?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 
    } 

?> 

注意:你應該有FULLTEXT索引的列主題,郵件,引用的TextBody

+0

感謝響應。一些查詢:全文工作在innodb數據庫引擎中?而使用匹配......反對我得到的結果有所有的話第一,任何兩個第二和任何一個三階?請你根據你的實踐展示一些最有用的例子。再次感謝。 – Prabhu 2012-01-27 06:18:12

+0

我在查詢數據庫時遇到了錯誤:**使用的表類型不支持FULLTEXT索引** – Prabhu 2012-01-27 06:22:12

+0

正如我在最後注意到的那樣(您應該在列主題,消息,引用,textbody上使用FULLTEXT索引)應用全文本像這樣的查詢索引這些列:ALTER TABLE tablename ADD FULLTEXT(subject,message,reference,textbody) – 2012-01-27 06:26:57

0

可以使用AND或OR運算關鍵詞中,根據您想要搜索返回的內容。

SELECT * FROM table WHERE subject LIKE %$param1% AND another_col LIKE %$param2% .......; 

OR

SELECT * FROM table WHERE subject LIKE %$param1% OR another_col LIKE %$param2% .......; 
+0

但在這種情況下,我不能將數據庫引擎類型innodb更改爲myism。所以我不能使用全文搜索功能。任何關鍵字排名的替代?我想要比http://r937.com/keyword_relevance.html更好的東西 – Prabhu 2012-01-27 06:45:08