phpcms批量提取关键字和内容摘要,便于搜索引擎收集

因为很多原因,比如网站升级,生成的html静态文件没有关键字和摘要,这样就不便于搜索引擎搜集,笔者对数据库比较熟悉,但对php语言不是很熟悉,所以就采用一种变通的方法批量从文章标题提取关键字和从内容提取200字左右最为内容摘要。

 

具体实现办法:

环境:debian 5.4  +php 5.2 +mysql 5.0 +phpcms 2008 sp4

 

一、从文章标题提取关键字

    根据这篇文章启发  全文搜索的数据库如何添加标题和关键字

已解决。解决的办法是修改search\include\search.class.php 文件中的以下代码:
        function add($title, $content, $url)
        {
                $data = $this->segment($title.$content);
                $data = $this->db->escape($data);
                $this->db->query("INSERT INTO `$this->table`(`type`, `data`) VALUES('$this->type', '$data')");
                $searchid = $this->db->insert_id();
        $this->set_data($searchid, array('title'=>$title, 'content'=>$content, 'url'=>$url));
                return $searchid;
        }

        function update($searchid, $title, $content, $url)
        {
                $data = $this->segment($title.$content);
                $data = $this->db->escape($data);
                $this->db->query("UPDATE `$this->table` SET `type`='$this->type',`data`='$data' WHERE `searchid`='$searchid'");
                if($this->db->affected_rows() == 0) return false;
                $this->set_data($searchid, array('title'=>$title, 'content'=>$content, 'url'=>$url));
                return true;
        }

将两处$data = $this->segment($title.$content);修改为$data = $title.' '.$this->segment($content);

这样的话,search表在发布文章和修改文章的时候就会自动记录下你的“全标题”“关键字”如果作者和来源不为空的话,也会记录下来。

这样修改后,进行全文搜索,就可以搜索标题的任意字,而不会出现经常搜索不到的问题。毕竟官方的分词功能不算强大。这也算是对搜索的一种弥补吧。

PS:如果是采集或数据导入,一定要记得在SERACH表进行写入。否则全文搜索无效。

search表就三个字段,分别是searchid (id号) type(模型) data  (搜索分词所在)

希望对大家有帮助。

 

     不过我的修改方法与上面不一致,我第一次通过重建索引自动分词时只需要对标题进行分词,内容就不分词了

  $data = $this->segment($title.$content);
  //$data = $title.' '.$data;          

  //这是原来的内容,我注译掉了,原来phpcms 2008 sp4是为了避免分词影响搜索标题,对标题进行了标题全文索引+标题分词索引。
  $data = $this->db->escape($data);
  $this->db->query("INSERT INTO `$this->table`(`type`, `data`) VALUES('$this->type', '$data')");
  $searchid = $this->db->insert_id();
        $this->set_data($searchid, array('title'=>$title, 'content'=>$content, 'url'=>$url));
  return $searchid;
 }

 function update($searchid, $title, $content, $url)
 {
  if($this->db->get_one("SELECT `searchid` FROM `$this->table` WHERE `searchid`='$searchid'"))
  {
   $data = $this->segment($title.$content);
   //$data = $title.' '.$data;

   //同上原理
   $data = $this->db->escape($data);

 

   二、后台--生成html---生成内容---生成url   主要是整理下url连接,如果原来连接没有问题,这部跳过

   三、后台--生成html--重建全部索引

   主要是用这个操作结合上面的修改得到标题的关键字(通过phpcms自带分词),研究了下linux下的scws分词,没有成功,scws的测试是通过了的,编了个简单的分词测试php文件也是能正确分词,就是在phpcms里面选择 scws 分词,然后重建索引,但索引表只有简单的一个标题内容,没有修改上面所说的php文件。知道的请告知一下,谢谢!

   为了避免索引表的searchid 编号与content 的contentid 编号相差太大,最好做下面的一 二 三步

  第一步:删除已经生成缓存文件
路径:/search/data/news 
提示:在/search/data/下有许多文件夹的情况,将其全部删除。
第二步:清空phpcms_search数据表
执行SQL语句:truncate phpcms_search;
第三步:更新searchid为0
执行SQL语句:update phpcms_content set searchid='0';
最后一步:更新URL
后台内容管理=》生成HTML=》更新URL

  

 

    完成后就得到标题的关键字,然后通过mysql 数据库 的正则替换将索引表的关键字替换到contyent 的key关键字内容列。

 

重新执行那个上面的二 三部

   update phpcms_content,phpcms_search set  phpcms_content.keywords=phpcms_search.data  wHERE phpcms_content.searchid=phpcms_search.searchid and  phpcms_content.searchid=1

 

 对分词不满意的可以update 替换,先加where 条件测试无误再替换,

这里先要回复上面修改了的php文件。去掉// 取消标志 

 update phpcms_content,phpcms_c_news set  phpcms_content.description=phpcms_c_news.content  wHERE phpcms_content.contentid=phpcms_c_news.contentid and  phpcms_content.contentid=1

 

下面是替换语句示例

UPDATE `phpcms_content` SET description=REPLACE(description,'ORAC LE','oracle')

你可能感兴趣的:(oracle,PHP,mysql,搜索引擎,Debian)