zoukankan      html  css  js  c++  java
  • 手把手教你做关键词匹配项目(搜索引擎)---- 第十六天

    第十六天

    友情客串:屌丝的坑人表单神器

    起点:手把手教你做关键词匹配项目(搜索引擎)---- 第一天

    回顾:手把手教你做关键词匹配项目(搜索引擎)---- 第十五天

    14天pdf版:http://files.cnblogs.com/oshine/%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%81%9A%E5%85%B3%E9%94%AE%E8%AF%8D%E5%8C%B9%E9%85%8D%E9%A1%B9%E7%9B%AE%2814%E5%A4%A9%29.pdf

    15天内的源码:
    http://files.cnblogs.com/oshine/myproject.rar

    从上次小帅帅跟于老大讨论完毕后,有个很郁闷的事情还没定下来,就是我们已有对应关系、反义词以及近义词这些数据它的数据格式是怎样的?

    小帅帅要弄懂这些才能继续进行下去,于是他又去请教于老大。

    于老大就对小帅帅说,我们先不考虑这么多因素,我们先从实际出发,我们先做反义词这块,就先从女装开始,女装是个类目吧,我们就按类目开始做。

    那么表结构的字段就有类目、反义词。

    小帅帅把表创建了出来:

    CREATE TABLE `category_backlist` (
       `cid` BIGINT(20) DEFAULT NULL COMMENT '类目ID',
       `catmatch` VARCHAR(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '类目名称',   
       `word` VARCHAR(18) CHARACTER SET utf8 DEFAULT NULL COMMENT '关键词',  
       `created` DATETIME DEFAULT NULL COMMENT '录入时间',
       UNIQUE KEY `cid` (`cid`,`keyword`)
     ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

    小帅帅并把数据补齐了。

    INSERT INTO category_backlist(cid,catmatch,word)VALUES("50010850","女装","男");
    INSERT INTO category_backlist(cid,catmatch,word)VALUES("50010850","女装","童");
    INSERT INTO category_backlist(cid,catmatch,word)VALUES("50010850","女装","宝宝");
    #......

    小帅帅很轻松的把代码也改正了一下。

    <?php
    abstract class CharListHandle {
    
        protected $charlist;
        protected $selectorItem;
        public function __construct($charlist,$selectorItem){
            $this->charlist = $charlist;
            $this->selectorItem = $selectorItem;
        }
    
        abstract function exec();
    }
    
    class BacklistCharListHandle extends CharListHandle {
        public function exec(){
            $sql = "select word from category_backlist where cid='$this->selectorItem->cid'";
            $backlist = DB::makeArray($sql);
            foreach($backlist as $char){
                $this->charlist->addBlacklist($char);
            }
    
        }
    
    }
    
    class Selector
    {
    
        private static $charListHandle = array(      
            "黑名单" => "BacklistCharListHandle"
        );
    
        public static function select($num_iid)
        {
            $selectorItem = SelectorItem::createFromApi($num_iid);
    
            Logger::trace($selectorItem->props_name);
    
            $charlist = new CharList();
    
            foreach (self::$charListHandle as $matchKey => $className) {
    
                $handle = self::createCharListHandle($className, $charlist, $selectorItem);
                $handle->exec();
               
            }
    
            //do search things
            var_dump($charlist);
        }
    
        public static function createCharListHandle($className, $charlist, $selectorItem)
        {
            if (class_exists($className)) {
                return new $className($charlist, $selectorItem);
            }
            throw new Exception("class not exists", 0);
        }
    }

    小帅帅的原稿本来不是这样的,他的原稿:

    CharListHandle 的属性有两个 一个是charlist 一个是cid

    于老大看了之后就要小帅帅把cid换成了selectorItem,原因嘛要小帅帅去琢磨。


    小帅帅还写了个DB操作的类,代码如下:

    <?php
    
    define('DATABASE_HOST','127.0.0.1');
    define('DATABASE_USER','xiaoshuaishuai');
    define('DATABASE__PASSWORD','xiaoshuaishuai');
    define('DATABASE_CHARSET','utf-8');
    
    class DB {
    
        public static $conn = null;
        
        public static function Connect(){
            if(self::$conn == null){
                self::$conn = mysql_connect(DATABASE_HOST,DATABASE_USER,DATABASE__PASSWORD);
                mysql_query("SET NAMES '".DATABASE_CHARSET."'",self::$conn);
                mysql_select_db("dict",self::$conn);
                return self::$conn;
            }
            return self::$conn;
        }
        
        public static function Query($sql){
           return mysql_query($sql,self::Connect());
        }
        
        public static function makeArray($sql){
            $rs = self::Query($sql);
            $result = array();
            while($data = mysql_fetch_assoc($rs)){
                $result[] = $data;
            }
            return $result;
        }
    } 

    小帅帅把这代码拿给于老大的时候,于老大很开心。

    于老大对小帅帅说,现在我们这个黑名单的改动,不管你怎么加或者怎么删除都不会影响系统的正常运行了把,而且我们可以很好的跟业务结合,这下这个黑名单的任务,小帅帅你觉得教给谁去做比较合适。

    小帅帅听到可以把任务转交,很开心:做这些事情,我觉得产品或者运营部门比较合适。

    于老大拍了拍小帅帅的肩膀说道:这件事情就交给你去落实了。

    偶尔的职责分离不一定是懒惰的行为,从整体上来说是让整个服务做到更专业、更有效率。

    小帅帅只好去落实于老大的任务去了

  • 相关阅读:
    c语言结构体数组引用
    c语言结构体数组定义的三种方式
    如何为SAP WebIDE开发扩展(Extension),并部署到SAP云平台上
    SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
    使用SAP API portal进行SAP SuccessFactors的API测试
    SAP UI5应用里的页面路由处理
    在SAP WebIDE Database Explorer里操作hdi实例
    如何使用SAP事务码SAT进行UI应用的性能分析
    使用SAP WebIDE进行SAP Cloud Platform Business Application开发
    SAP CRM WebClient UI ON_NEW_FOCUS的用途
  • 原文地址:https://www.cnblogs.com/oshine/p/3936570.html
Copyright © 2011-2022 走看看