最近测试了xunserach全文索引程序。xunsearch只有LINUX版,所以想用windows服务器请使用其它全文索引程序。xunsearch本身不像coreseek那样自带增量索引的功能,所以很多从coreseek转过来的朋友很是不习惯。不过xunsearch拥有很多的API和案例,使用这些程序很容易做出自己的增量索引脚本,只需要把这些脚本添加到LINUX服务器任务里就可以实现增量索引了。
下面是实现增量索引的PHP程序,修改好账号密码,索引sql语句后把这个文件添加到crontab任务里就可以。
| | * 添加:pass_state=1 && create_time> * 修改:pass_state=1 && edit_time> 文件记录值 * 删除:status =0 如果有del_time也可以通过上面的方法判断,我这里没有 * 文件记录值:上次更新索引时的时间 * 正常调用:jishubu.net.php * 不开启日志:jishubu.net.php?log=no * 如果你是通过我这样记录已删除id的方式,并且非物理删除,并且开启了日志功能,第一次调用最好先在浏览器执行jishubu.net.php?first=yes,不然如果删除数据较多,生成的日志文件较多,浪费空间。 * 其他:然后把文件放到crontab中,每天,小时,或分执行一次就行了。请根据自己项目情况改进。 * @author www.jishubu.net on wish 2012.11.30 改进 error_reporting(E_ALL ^ E_NOTICE); define('APP_PATH',dirname(__FILE__)); $prefix= '/usr/local/xunsearch'; $element= "$prefix/sdk/php/app/mfnews.ini"; require_once"$prefix/sdk/php/lib/XS.php"; $first= (trim($_GET['first'])=='yes') ? true : false; $log= (trim($_GET['log'])=='no') ? false : true; $xs= newXS($element); // 建立 XS 对象 $index= $xs->index; // 获取 索引对象 $doc= newXSDocument; // 创建文档对象 $last_index_time= @file_get_contents(APP_PATH.'/last_index_time.txt'); $last_index_time= $last_index_time? $last_index_time: time(); //这里也可以在last_index_time.txt文件中加个初始值 //删除过的id列表,如果字段有删除时间字段则不需要记录,如果是物理删除,需要记录删除日志,否则无法知道哪些文件曾被删除 $last_del_id= @file_get_contents(APP_PATH.'/last_del_id.txt'); $link= mysql_connect('localhost:3306', 'root', '123456') orexit(mysql_error()); mysql_select_db('phpcms', $link) orexit(mysql_error()); mysql_query("SET NAMES utf8"); $sql= "select count(*) as zongshu from phpcms_news,phpcms_news_data where phpcms_news.id=phpcms_news_data.id and phpcms_news.status=99 and phpcms_news.islink=0 and (phpcms_news.inputtime > {$last_index_time} or phpcms_news.updatetime > {$last_index_time})"; $zongshu= mysql_query($sql) orexit(mysql_error()); while($row= mysql_fetch_array($zongshu, MYSQL_ASSOC)){ $i= 1; $count=1; $add_total= 0; $edit_total=0;$addArray=array();$editArray=array(); //添加分批查询避免查询出过多的数据使PHP报错 $index->openBuffer(); // 开启缓冲区 $sql= "select inch_cms_news.id as id,title,url,inputtime,updatetime,inch_cms_news_data.content as content from inch_cms_news,inch_cms_news_data where inch_cms_news.id=inch_cms_news_data.id and inch_cms_news.status=99 and inch_cms_news.islink=0 and (inch_cms_news.inputtime > {$last_index_time} or inch_cms_news.updatetime > {$last_index_time}) limit $n,100"; $res= mysql_query($sql) orexit(mysql_error()); $restult= array(); while($row= mysql_fetch_array($res, MYSQL_ASSOC)){ linux系统之IP、TCP封包格式 阅读原文»
一、IP封包格式说明 前言 IP 协议用 IP 报文头封装传输层报文,IP 报文头包含了如下的信息:这个 IP 协议是一个非面向连接的协议,也就是说 IP 不需要协商一个连接。面 1、IP报文格式 上面图中每一行所占用的位数为32bits,各个表头的内容分别介绍如下 版本(Version) 第 0 到 3bit。版本字段是二进制表示的,IPV4 为 0100,而 网络报文头长(Internet Header Length) 第 4-7bit,它表示以 4 字节为单位的报文头长,例如没有选项的报文长度为 20byte,这样这个字段就为 5 TOS 字段 第 8 到 15bit,这个字段是 IP 报文头里面最复杂的部分之一,这个字段已经被更新 3 次了。他们的基本含义没有发生变化,但是他们 的具体实现却改变了。最初,这个字段被称为服务类别(type of
例如: 以太网络的种种相关规格可以让这个ip封包加速且降低延迟,某些特殊的标志就是在这里说明的。 注: 这种实现方式在很多老的硬件里面还能够看到。但是在后 来更新的 ECN 版本里面,第 6-7bit 被使用了,这样他们就被设置了值而不是原 先的预留值 0.但是很多老的防火墙和路由器在检查报文时候,发现这些字段是 1 就会把这个报文丢掉。 封包总长(TL) 通常以byte做单位来表示该封包的总长度此数值包括标头和数据的总和,最大可达65535bytes 识别码(ID) 每一个IP封包都有一个16bit的唯一识别码。 当程序产生的数据要通过网路传送时都会在传送层被拆散成封包形式发送当封包要进行重组的时候就是依据这个ID 。 Flags(特殊标识) 这是当封包在传输过程中进行最佳组合时使用的3个bit来标识 X__:R:当此值为0的时候表示目前未被使用 _X_:DF:若为0表示可以分段,若为1表示不可分段 __X:MF:若为0表示此IP为最后分段,若为1表示非最后分段 FragmentOffset(分段偏移)--13bits 当一个大封包在经过一些传输单位(MTU)较小的路径时,会被被切割成碎片(fragment)再进行传送(这个切割和传送层的打包有所不同,它是由网路层决定的)。 由于网路情况或其它因素影响其抵达顺序并不会和当初切割顺序一致的。 所以当封包进行切割的时候会为各片段做好定位记录,如果封包没有被切割那么FO的值为"0" Time To Live(TTL,存活时间)--8bits 当一个封包被赋予TTL值,TTL是以hop为单位,每经过一个router就减一如果封包TTL值被降为0的时候就会被丢弃。 这样当封包在传递过程中由于某些原因而未能抵达目的地的时候就可以避免其一直充斥在网络上面,之所以不返回响应,是因为响应也是点用网络资源的,所以直接就丢弃了 Protocol Number(协议代码)-8bits 来自传输层与网络层本身的其他数据都放置在ip封包当中的,我们可以在IP表头记载这个IP封包内的数据是什么,在这个字段就是记载每种数据封包的内容啦,在这个字段记载的代码与相关的封包协议名称如下所示:
订阅:
博文评论 (Atom)
|
没有评论:
发表评论