php扫描特定关键字的内容

时间:2011-09-29 15:25:20

标签: php search tags keyword

作为CMS管理员的一部分,我想扫描新文章,了解存储在mysql数据库中的特定关键短语/标签。

我足够熟练,可以将关键字列表拉出来,循环遍历并执行stripos,并使用substr_count构建找到的关键字数组。但是平均文章大约有700个单词,并且有16,000个标签并且正在增长,所以目前循环需要大约0.5秒,这比我希望的要长,并且只会变得更长。

有更好的方法吗?即使这种类型的程序有一个特殊的名称,这可能有所帮助。

我在Fedora上有PHP 5.3,它也在专用服务器上,因此我没有任何共享主机问题。

编辑 - 我是一个散乱的大脑,我发誓盲目,我复制并粘贴了一些代码!显然不是

$found = array();
while($row = $pointer->fetch_assoc())
{
    if(stripos($haystack, $row["Name"]) )
    {
        $found[$row["Name"]] = substr_count( $haystack, $row["Name"]);
    }
}
arsort($found);

我认为我解释得很糟糕,因为我想对他们目前不在数据库中的新文章进行处理,所以我只是在ajax请求中使用$ _POST,而不是将文章保存到数据库第一

2 个答案:

答案 0 :(得分:0)

如果您不想使用sphinx / solr等搜索引擎脚本,

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html正是您所寻找的。

答案 1 :(得分:0)

听起来你的代码看起来像这样:

foreach($keywords as $keyword){
    if(strpos($keyword, $articleText) != -1){
        $foundKeywords[] = $keyword;
    }
}

你可能会考虑的事情,因为关键字数组如此之大并且将继续增长是将处理切换为循环遍历文本中的单词而不是关键字数组。像这样:

$textWords = explode(" ", $articleText);

foreach($textWords as $word){
    if( array_search($word, $keywords) && !array_search($word, $foundKeywords) ){
        $foundKeywords[] = $word;
    } 
}