skymvc开发手册之skymvc开发简易搜素引擎
skymvc开发简易搜素引擎
/*
* 作者 雷日锦 2016-05-24
*大家好,欢迎学习。今天给大家讲一个简易搜索引擎的开发。
*搜索引擎分为两部分:蜘蛛 和 全文索引
*演示地址:http://skycms.deitui.com/module.php?m=search
*/
第一部分 蜘蛛的设计
蜘蛛采用skymvc自带的类库cls_spider.php cls_solink.php
cls_spider.php 简单封装curl_multi
for($i=0;$i<2;$i++){ $urls[]="http://mil.qq.com/"; } $sp=new Spider(); $sp->start($urls,function($data){ print_r($data); });
*cls_solink 对网页内容进行解析 链接提取
$solink=new solink($rdata); $solink->get_content($rdata['content']); $title=$solink->get_title(); $keywords=$solink->get_keywords(); $description=$solink->get_description(); $rp=parse_url($rdata['url']); $links=$solink->get_link();
第二部分 全文索引 我们使用coreseek
//建立索引
./bin/indexer -c ../etc/csft_mysql.conf searchd --rotate
./bin/indexer -c ../etc/csft_mysql.conf delta --rotate
./bin/indexer -c ../etc/csft_mysql.conf --merge searchd delta --rotate
//开启服务
./bin/searchd -c ../etc/csft_mysql.conf
索引模式“主索引+增量索引”
我们需要添加一个执行任务
5分钟合并一次增量索引
每天生成一次主索引的
------mysql----------
CREATE TABLE `sky_mod_search_config` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `threads` smallint(6) unsigned NOT NULL DEFAULT '20' COMMENT '线程数', `steps` tinyint(6) unsigned NOT NULL DEFAULT '9' COMMENT '采集深度', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='搜索-配置'; CREATE TABLE `sky_mod_search_domain` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(225) NOT NULL DEFAULT '' COMMENT '主题', `domain` varchar(255) NOT NULL DEFAULT '', `basedomain` varchar(255) NOT NULL DEFAULT '' COMMENT '一级域名', `url` varchar(300) NOT NULL DEFAULT '' COMMENT '首页', `dateline` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时间', `step` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '第几级', `selfsite` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1 只采集自己当前域名的站 0.采集主域名及子域名 2.采集所有', PRIMARY KEY (`id`), KEY `url` (`url`,`dateline`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='搜索引擎-主题'; CREATE TABLE `sky_mod_search_sphinxcount` ( `id` int(10) unsigned NOT NULL, `max_doc_id` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='增量索引ID'; CREATE TABLE `sky_mod_search_spider` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `url` varchar(300) NOT NULL DEFAULT '' COMMENT '地址', `islock` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '锁 1是 0否', `dateline` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时间', `step` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '第几级', `domain` varchar(32) NOT NULL DEFAULT '', `nolink` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是没链接', `basedomain` varchar(32) NOT NULL DEFAULT '' COMMENT '一级域名', PRIMARY KEY (`id`), KEY `url` (`url`,`dateline`), KEY `islock` (`islock`,`step`,`dateline`) USING BTREE, KEY `domain` (`domain`,`islock`,`step`,`dateline`), KEY `basedomain` (`basedomain`,`islock`,`step`,`dateline`) ) ENGINE=InnoDB AUTO_INCREMENT=67029 DEFAULT CHARSET=utf8 COMMENT='搜索引擎-蜘蛛'; CREATE TABLE `sky_mod_search_topic` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `url` varchar(300) NOT NULL DEFAULT '' COMMENT '地址', `islock` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '锁 1是 0否', `dateline` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时间', `last_time` int(10) unsigned NOT NULL DEFAULT '0', `step` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '第几级', `title` varchar(225) NOT NULL DEFAULT '' COMMENT '主题', `keywords` varchar(225) NOT NULL DEFAULT '' COMMENT '关键词', `description` varchar(225) NOT NULL DEFAULT '' COMMENT '描述', `grade` int(10) unsigned NOT NULL DEFAULT '0', `domain` varchar(255) NOT NULL DEFAULT '', `basedomain` varchar(255) NOT NULL DEFAULT '' COMMENT '一级域名', `content` mediumtext, PRIMARY KEY (`id`), KEY `url` (`url`,`dateline`) ) ENGINE=InnoDB AUTO_INCREMENT=1611 DEFAULT CHARSET=utf8 COMMENT='搜索引擎-主题';