2012-01-27 262 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