thinkphp分词全文检索全文搜素,利用PullWord分词接口。借鉴TNTSearch数据库思路。精确匹配结果

简单调用 建议分页查询,每篇长文章,几千词汇不是闹着玩的。

Ksearch

安装 htmlpurifier
htmlpurifier

$ composer require ezyang/htmlpurifier

<?php
namespace app\search\controller;
use think\Controller;
use think\Request;
use think\Db;
use Ksearch\Ksearchmysql;
use think\facade\Cache;
use think\facade\Debug;
ini_set('max_execution_time',0);
class Index extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {

        $config = [ 
        'storage' => '../Ksearch.db',
        ];
       //$Ksearch=new Ksearch($config);
/*
查询还没建立索引的文章,简单的分页可能有遗漏
*/
     $res=$db->query("SELECT distinct doc_id as id FROM doclist;");
     $as=[];
     foreach ($res as $key => $value) {
        $as[]=$value['id'];
    }
    $kk=Db::table('ks_weibo')->field('id')->select();
    $asb=[];
    foreach ($kk as $key => $value) {
        $asb[]=$value['id'];
    }
    $sas=array_diff($asb, $as);
    $start=0;
    /*分页13条*/
    $article = array_slice($sas,$start,13);
    $s = implode(',', $article);
    $Ksearch=new Ksearchsql();
    $Ksearch->kquery('SELECT A.id as id,A.title as title,A.tag as tag,UNCOMPRESS(B.content) as content  from ceshi A left join content B  on A.id= B.wid WHERE A.id IN ('.$s.');');       
        $res=$Ksearch->kinsert();
        Cache::inc('name');
        return json($s);
    }
    public function addcahe()
    {
     Cache::set('name',1,3600);
    }
/**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read()
    {
       $config = [ 
       'storage' => '../Ksearch.db',
       ];

         $Ksearch=new Ksearchsql();
       $text='每篇几千词汇的文章,每次都要查询数据库';
       Debug::remark('begin');
       $res=$Ksearch->search($text);
       Debug::remark('end');
       if (!$res) {
           return "0";
       }
       echo Debug::getRangeTime('begin','end').'s';
       echo "<pre>";
       print_r($res);
       echo "</pre>";


   }
}

每篇几千词汇的文章,每次都要查询数据库,耗时。
简单处理思路。

1 索引词汇表 wordlist 文件缓存 Cache::set('gjc',1);

//键值对互转
if (Cache::get('gjc')) {
    $gjc=[];
     $res=$db->query("SELECT  id,term FROM wordlist ;");
     if ($res) {
        foreach ($res as $key => $value) {
            $gjc[$value['term']]=$key;
        }
     }
     Cache::set('gjc',$gjc);
}
//缓存关键词表
if (Cache::get('wordlist')) {

     $res=$db->query("SELECT  id,term, num_hits, num_docs FROM wordlist ;");

     Cache::set('wordlist',$res);
}

2 自行修改 Ksearchmysql.php 文件中 pl() 批量操作 3 次写入函数

        $winstdata=[];
        $wupdata=[];
        $dinstdata=[];

上3 变量最好放到

 foreach ($this->kdbinfo  as $key => $value)

上面

foreach ($this->kdbinfo as $key => $value) {} ////里面逻辑自行修改
  /*pullword分词*/
  function pullword($postData)
{
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,'http://120.26.6.172/get.php?'.$postData);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_HEADER, false);
  //curl_setopt($ch, CURLOPT_POST, count($postData));
  //curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  $output=curl_exec($ch);
  curl_close($ch);
  return $output;
}

  function htmla($value) {

    $config = HTMLPurifier_Config::createDefault();

    $config->set('HTML.Allowed', '');

    $purifier = new HTMLPurifier($config);

    $clean_html = $purifier->purify($value);

    return ($clean_html);

  }
//去标点等无用符号
  function filter_mark($text){
    if(trim($text)=='')return '';
    $text=preg_replace("/[[:punct:]\s]/",' ',$text);
    $text=urlencode($text);
    $text=preg_replace("/(%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|%2A|%28|%29|%2B|%7C|%5C|%3D|\-|_|%5B|%5D|%7D|%7B|%3B|%22|%3A|%3F|%3E|%3C|%2C|\.|%2F|%A3%BF|%A1%B7|%A1%B6|%A1%A2|%A1%A3|%A3%AC|%7D|%A1%B0|%A3%BA|%A3%BB|%A1%AE|%A1%AF|%A1%B1|%A3%FC|%A3%BD|%A1%AA|%A3%A9|%A3%A8|%A1%AD|%A3%A4|%A1%A4|%A3%A1|%E3%80%82|%EF%BC%81|%EF%BC%8C|%EF%BC%9B|%EF%BC%9F|%EF%BC%9A|%E3%80%81|%E2%80%A6%E2%80%A6|%E2%80%9D|%E2%80%9C|%E2%80%98|%E2%80%99|%EF%BD%9E|%EF%BC%8E|%EF%BC%88)+/",' ',$text);
    $text=urldecode($text);
    return trim($text);
  } 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,242评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,953评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,299评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,709评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,723评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,236评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,629评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,594评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,135评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,156评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,285评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,914评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,600评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,073评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,203评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,798评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,339评论 2 365

推荐阅读更多精彩内容