新浦京81707con > 功能介绍 > v9按照添加的栏目搜索,便于搜索引擎收集

原标题:v9按照添加的栏目搜索,便于搜索引擎收集

浏览次数:121 时间:2019-07-10

因为众多缘故,比方网址进级,生成的html静态文件并未关键字和摘要,那样就不低价寻觅引擎搜聚,小编对数据库比较熟习,但对php语言不是很纯熟,所以就选拔一种变化的方法批量从小说标题提取关键字和从内容提取200字左右最为内容摘要。

1、修改后台增加、修改内容时增加栏目id到找寻表中
  找到  phpcmsmodelcontent_model.class.php 大致113、302行左右,一共两处
  $this->search_api($id,$inputinfo);
  修改为:
  $this->search_api($id,$systeminfo['catid'],$inputinfo);
  找到 大概381行,将private function search_api 方法替换为以下代码
  private function search_api($id = 0,$catid, $data = array(), $action = 'update') {
  $type_arr = getcache('search_model_'.$this->siteid,'search');
  $typeid = $type_arr[$this->modelid]['typeid'];
  if($action == 'update') {
  $fulltext_array = getcache('model_field_'.$this->modelid,'model');
  foreach($fulltext_array AS $key=>$value){
  if($value['isfulltext']) {
  $fulltextcontent .= $data['system'][$key] ? $data['system'][$key] : $data['model'][$key];
  }
  }
  $this->search_db->update_search($typeid ,$id, $fulltextcontent,addslashes($data['system']['title']).' '.addslashes($data['system']['keywords']),$data['system']['inputtime'],'',$catid);
  } elseif($action == 'delete') {
  $this->search_db->delete_search($typeid ,$id);
  }
  }

分化于使用本人的服务器举行分词,Discuz!在线普通话分词服务是基于API再次回到分词结果的。在项目中,大家只需求贰个函数就可以方便地拓展分词、关键词提取。
以下是依据Discuz!在线分词服务API写的函数,测验可寻常运维:

 

  2、修改搜索模板文件
  找到 phpcmsmodelsearch_model.calss.php 的 21行左右
  将 update_search 方法替换为:
  public function update_search($typeid ,$id = 0,$data = '',$text = '',$adddate = 0, $iscreateindex=0,$catid) {
  $segment = pc_base::load_sys_class('segment');
  //分词结果
  $fulltext_data = $segment->get_keyword($segment->split_result($data));
  $fulltext_data = $text.' '.$fulltext_data;
  if(!$iscreateindex) {
  $r = $this->get_one(array('typeid'=>$typeid,'id'=>$id),'searchid');
  }
  if($r) {
  $searchid = $r['searchid'];
  $this->update(array('data'=>$fulltext_data,'adddate'=>$adddate,'catid'=>$catid),array('typeid'=>$typeid,'id'=>$id));
  } else {
  $siteid = param::get_cookie('siteid');
  $searchid = $this->insert(array('typeid'=>$typeid,'id'=>$id,'adddate'=>$adddate,'data'=>$fulltext_data,'siteid'=>$siteid,'catid'=>$catid),true);
  }
  return $searchid;
  }

复制代码 代码如下:

现实贯彻形式:

  3、修改后台更新全站缓存地点
  找到phpcmsmodelscontentclassessearch_api.class.php 的第 31行
  将        $system_keys = 'id,inputtime'.implode(',',$system_keys);
  修改为
  $system_keys = 'id,inputtime,catid,'.implode(',',$system_keys);
  找到 $temp['adddate'] = $r['inputtime'];在前边加上
  $temp['catid'] = $r['catid'];
  找到phpcmsmodelssearchsearch_admin.php大致第85行,将foreach修改为上面
  foreach ($datas as $id=>$r) {
  $this->db->update_search($typeid ,$id, $r['fulltextcontent'],$r['title'],$r['adddate'], 1,$r['catid']);
  }

/**
 * DZ在线普通话分词
 * @param $title string 进行分词的标题
 * @param $content string 进行分词的剧情
 * @param $encode string API重临的数据编码
 * @return  array 获得的主要词数组
 */
 function dz_segment($title = '', $content = '', $encode = 'utf-8'){
    if($title == ''){
        return false;
    }
    $title = rawurlencode(strip_tags($title));
    $content = strip_tags($content);
    if(strlen($content)>2400){ //在线分词服务有长度限制
        $content =  mb_substr($content, 0, 800, $encode);
    }
    $content = rawurlencode($content);
    $url = ';
    $xml_array=simplexml_load_file($url);                        //将XML中的数据,读取到数组对象中 
    $result = $xml_array->keyword->result;
    $data = array();
    foreach ($result->item as $key => $value) {
            array_push($data, (string)$value->kw);
    }
    if(count($data) > 0){
        return $data;
    }else{
        return false;
    }
 }

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

  4、修改前台搜索程序
  找到 phpcmsmodelssearchindex.php 第25行
  在 if(isset($_GET['q'])) { 下加上
  $catid =$_GET['catid']?" AND catid = '$_GET[catid]'":'';
  然后在第57行左右,将
  $commend = $this->db->get_one("`typeid` = '$typeid' $sql_time AND `data` like '%$q%'");
  修改为
  $commend = $this->db->get_one("`typeid` = '$typeid' $sql_time $catid AND `data` like '%$q%'");
  再找到第84行左右将
  //要是分词结果为空
  if(!empty($segment_q)) {
  $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)";
  } else {
  $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'";
  }
  修改为
  //倘诺分词结果为空
  if(!empty($segment_q)) {
  $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $catid $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)";
  } else {
  $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $catid $sql_time AND `data` like '%$q%'";
  }

分词示例,通过url访谈:

 

  5、最后一步,步向数据库,找到数据表  v9_search,在此表中加一字段  catid  int 4 做个目录,那样就做到了,前台调用的代码为:

复制代码 代码如下:

一、从小说标题提取关键字

 <input type="hidden" name="m" value="search"/>
                <input type="hidden" name="c" value="index"/>
                <input type="hidden" name="a" value="init"/>
<input type="hidden" name="typeid" value="1" id="typeid"/>   
                <input type="hidden" name="catid" value="12" id="catid"/>
                <input type="hidden" name="siteid" value="{$siteid}" id="siteid"/>
<input type="text" autocomplete="off" id="input" name="q" value="请输加入关贸总协定协会键词,如 北大" />
<input type="submit" onMouseOut="this.className=''" onMouseDown="this.className='mousedown'" onMouseOver="this.className='hover'" value="寻找一下" id="search-button">

    依据这篇小说启发  全文字笔迹核实索的数据库怎样加多标题和严重性字


返回的XML数据:

已消除。化解的主意是修改searchincludesearch.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;
        }

<?xml version="1.0" encoding="utf-8" ?>
<total_response>
 <svalid>36000</svalid>
 <keyword>
 <info>
  <count>1</count>
  <errno>0</errno>
  <nextuptime>1291287160</nextuptime>
  <keep>0</keep>
 </info>
 <result>
  <item>
   <kw><![CDATA[高三历史]]></kw>
  </item>
 </result>
 </keyword>
</total_response>

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

你大概感兴趣的作品:

  • php达成的普通话分词类完整实例
  • php实现scws汉语分词搜索的点子
  • PHPAnalysis中文分词类详解
  • 开源php汉语分词系统SCWS安装和平运动用实例
  • PHP普通话分词 自动获得主要词介绍
  • PHP汉语分词的差不离达成代码分享
  • 协助汉转拼和拼音分词的PHP粤语言文字工作具类ChineseUtil

那样的话,search表在发布小说和改动文章的时候就能够自动记录下你的“全标题”“关键字”假使笔者和来源不为空的话,也会记录下来。

那般修改后,进行全文字笔迹查验索,就能够寻觅标题标任意字,而不会冒出平常找寻不到的难题。究竟官方的分词功效不算变得强大。那也算是对寻找的一种弥补吧。

PS:借使是访问或数量导入,必须要记得在SERACH表实行写入。不然全文检索无效。

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

本文由新浦京81707con发布于功能介绍,转载请注明出处:v9按照添加的栏目搜索,便于搜索引擎收集

关键词: 新浦京81707con

上一篇:帝国CMS谈站长如何选择适合自己的CMS,PHPCMS及织

下一篇:没有了