2014年3月30日星期日

xunsearch增量索引改进版

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
xunsearch增量索引改进版  阅读原文»

用户名:ziyou1230
文章数:1
评论数:0
访问量:29
无忧币:50
博客积分:40
博客等级:1
注册日期:2014-03-28

xunsearch增量索引改进版

最近测试了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封包格式  阅读原文»

用户名:jinlinger
文章数:25
评论数:28
访问量:4845无忧币:4116博客积分:424:3 注册日期:2009-04-02

linux系统之IP、TCP封包格式

一、IP封包格式说明

前言

IP 协议用 IP 报文头封装传输层报文,IP 报文头包含了如下的信息:这个
报文从哪个传输层协议过来,它准备被发送到哪台机器,它从哪儿来以及一些
其他有用的信息.

IP 协议是一个非面向连接的协议,也就是说 IP 不需要协商一个连接。面
向连接的协议需要协商一个连接,然后在这个连接上面收发数据,最后关闭这
个连接。TCP 就是这样的协议,但是它建立在 IP 基础之上的。IP 不是面向连接
的原因有很多种,其中一个原因就是它不会为很多应用增加不必要的开销。对
于报文丢失的情况,通过简单的重传就可以解决问题,而不需新建连接,等待
对端确认等等额外开销。

1、IP报文格式

wKiom1M0W-azuDKfAAKtPAde_JU742.jpg

上面图中每一行所占用的位数为32bits,各个表头的内容分别介绍如下

版本(Version)

第 0 到 3bit。版本字段是二进制表示的,IPV4 为 0100,而
IPV6 为 0110.这个字段在报文过滤中很少用到。

网络报文头长(Internet Header Length)

第 4-7bit,它表示以 4 字节为单位的报文头长,例如没有选项的报文长度为 20byte,这样这个字段就为 5

TOS 字段

第 8 到 15bit,这个字段是 IP 报文头里面最复杂的部分之一,这个字段已经被更新 3 次了。他们的基本含义没有发生变化,但是他们 的具体实现却改变了。最初,这个字段被称为服务类别(type of
service)

标识 项目 说明
XXX_____ Routine 设定IP顺序,预设为0,否则数值越高越优先
___X____ Delay 延迟要求,0 为正常值,如果为1表示低延迟
____X___ Throughput 通讯量要求,0为正常值,1为高传输量
_____X__ Reliabiltity 可靠性要求,0为正常值,1为高要求
______XX Not Used 未使用
  1. 0-2bit 称为优先权字段;

  2. 第 3bit 表示时延;

  3. 第 4bit 表示吞吐量;

  4. 第5bit表示对可靠性的要求级别;

  5. 最后两个 bit 预留 .

例如:

以太网络的种种相关规格可以让这个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封包内的数据是什么,在这个字段就是记载每种数据封包的内容啦,在这个字段记载的代码与相关的封包协议名称如下所示:

wKioL1M0W-7wCJJfAAErI1oNz_U935.jpg

阅读更多内容

没有评论:

发表评论