« 2010年05月8日的文章归档

RDBMS的lucene爬虫

主要介绍如何周期性尽量实时地从RDBMS爬数据然后建索引,不涉及AOP或ORM Framework的listener方式。 先决条件: 1. Lucene索引是从无到有的,一开始所有数据都是存储在RDBMS(Oracle)中。 2. 数据表有一列是updateTime或称为lastModifiedTime用来存储最后一次更新时间,并建有db索引 3. 主表必须要有主键,这个主键也用来唯一确定一个Lucene document。 该策略大致可以分为以下几个部分: 1.索引结构 2.初始化索引 3.增量索引 4.补偿操作 5.删除检测 6.备份 7.注意点 索引结构: 我们是做全文搜索的,所以db中的用户需要全文搜索的字段值都会拼接成一个string存储在lucene的一个字段中称为content。其他的需要存储的字段或者字段分析后的token是有意义单词的我们称为metadata,每个metadata是document的一个field。 从索引结构看来,我们有一个主表,不同的主表OID的记录对应不同的lucene document。主表依赖的所有子表中的数据如果是需要做全文搜索的就需要a…
阅读更多……

使用zend Framework的lucene进行全文检索——中文分词

zf本身没有提供中文分词算法,具体应用中要自己写。我这里使用简单的二元分词算法(只在utf-8下工作正常,对于其他字符集,请修改程序)。 第一步、如何测试分词算法的输出。 在zf 的手册中没有提到,我这里简单给个例子: php ?php $analyzer = Zend_Search_Lucene_Analysis_Analyzer :: getDefault ; $value = 'this is a test!' ; $analyzer - setInput $value , 'utf-8' ; $position = 0 ; $tokenCounter = 0 ; while $token = $analyzer - nextToken !== null $tokenCounter ++; $tokens = $token ; print_r $tokens ; ? 这里使用是zf默认的分词算法Zend_Search_Lucene_Analysis_Analyzer_Common_Text。另外你可以加上一个过滤方法。比如说过滤一些单词,比如“is”,a 之类的。 php ?ph…
阅读更多……

Zend Search Lucene使用的问题

单独把zend_search组件提取出来,在网上找到一个 例程 ,我用的版本是0.9.2beta creat.php创建索引程序 php ?php include ./Search/Lucene.php ; $index = new Zend_Search_Lucene 'index' , true ; //建立索引对象,TRUE表示一个新的索引 $url = 'http://www.sellcamera.net/detail.php/' ; //产品链接 $title = cnu2m1001 ; //产品标题 $description = 451254511qwesaafdhufnznmcjhdfsdfdkshfbfhsdfsdfjshfjsuikccncvmjvhfdfhmdfjf ; //产品的描述,自己组合它的内容 $doc = new Zend_Search_Lucene_Document ; //建立一个索引文档 $doc - addField Zend_Search_Lucene_Field :: UnIndexed 'url' , $url ; $doc - addFi…
阅读更多……

Linux一些页的东西

在Linux世界里,分为Page cache,Buffer cache两个层面。其中page cache包含了buffer cache,内存只和page cache交互。标准的LINUX总 是假定处理器有三级页表,分别为页目录表(PGD),中间页目录表(PMD)和页表(PTE)。如果程序在进行物理地址转换的时候,中是通过页目录表来索 引中间页目录表,再通过中间页目录表来索引页表,从而查找到某页与内存BLOCK块的对应关系。我把书上的图,拍下来了,哈: 我们平时只说,page in,page out。file,page cahe,buffer cache,block的关系如下图: 我们主要讨论下 linux的页的生命: 在讨论page之前,必须要提及 LINUX的几个关键进程:  kscand, kswapd, kupdated, bdflush. 他们负责LINUX的内存管理。 一般内存的一页,生命周期如下图: free –  在系统启动以后,初始化状态均为FREE。 active -- 当前被OS使用或者用户进程所使用的状态,均为active。 inactive dirty(脏数据)…
阅读更多……

scp和rsync的实际应用

近段时间工作需要做了些scp和rsync的异地安全备份,整理了一下,希望多大家有用。 scp的备份指南: 需求:用scp自动完成异地文件的定时copy 难点:如何让异地主机建立安全的信任关系 1、在A机器上用root运行ssh-keygen,将生成/root/.ssh/identity和/root/.ssh/identity.pub两个文件; 2、在A机器上运行scp /root/.ssh/identity.pub test@192.168.1.10:/upload/.ssh/authorized_keys(假设B机器的IP地址为192.168.1.10,B 机器上开了用户test,要上传到的目录是/upload,需输入密码)。目的是将本地的identity.pub放到远程机器上并改名为 authorized_keys,这样就建立了新任主机,以后就不需要每次ssh都需要输入密码了; 3、通过crontab建立脚本,例:30 02 * * 1-5 scp /home/data/* test@192.168.1.10:/upload。 (每天2:30am自动将/home/data下面的所有…
阅读更多……

如何使得执行scp命令时不需要输入用户密码

在两台机器的两个用户之间建立安全的信任关系后,可实现执行scp命令时不需要输入用户密码。我根据该资料介绍的方法测试成功了。 以下是在机器Client的root和机器Server的root之间建立安全信任关系的步骤: 1. 在机器Client上root用户执行ssh-keygen命令,生成建立安全信任关系的证书。 [root@Client root]# ssh-keygen -b 1024 -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):            直接输入回车 Enter same passphrase again:                           直接输入回车 Your identification has been saved in /root/.ssh/id_rsa. Your public key has…
阅读更多……
浙ICP备08010023号