【问题标题】:php search engine key words rankingphp搜索引擎关键词排名
【发布时间】:2012-02-20 04:57:48
【问题描述】:

我是 php 和 mysql 的新手。在我的项目中,我必须为多个列上的多个关键字开发搜索引擎,并且还需要关键字排名和相关性。

例如,如果我有三个单词 hi、hello、hey,并且想要搜索主题、消息、参考、文本正文等字段。在这种情况下,具有更多关键字排名的行将排在第一位,排名最低的行排在最后。有人会指导我如何实现这样的搜索引擎。我的数据库大约有 400 万个,并且还在快速增长。

【问题讨论】:

    标签: mysql search ranking relevance keyword-search


    【解决方案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 索引

    【讨论】:

    • 感谢您的回复。一些查询:全文是否在 innodb 数据库引擎中工作?在使用匹配时...反对我得到的结果是所有单词都排在第一位,任何两个排在第二位,任何一个排在第三位?请您展示一些最适合您实践的有用示例。再次感谢。
    • 我在 DB 上查询时出错:**使用的表类型不支持 FULLTEXT 索引**
    • 正如我在结尾处给出的注释(您应该对列主题、消息、参考、文本正文进行 FULLTEXT 索引)像这样查询应用这些列的全文索引: ALTER TABLE tablename ADD FULLTEXT (subject,消息,参考,正文)
    • 您也可以使用like。看我的另一个答案。
    【解决方案2】:

    您可以将 AND 或 OR 运算符与 like 关键字一起使用,具体取决于您希望搜索返回的内容。

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

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

    【讨论】:

    • 但在这种情况下,我无法将数据库引擎类型 innodb 更改为 myism。所以我不能使用全文搜索功能。关键字排名的任何替代方案?我想要比r937.com/keyword_relevance.html更好的东西@
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2011-08-24
    • 2010-11-23
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-09-21
    相关资源
    最近更新 更多