摘要: 6、FilteredQuery FilteredQuery包含两个成员变量: Query query:查询对象 Filter filter:其有一个函数DocIdSet getDocIdSet(IndexReader reader) 得到一个文档号集合,结果文档必须出自此文档集合,注此处的过滤器所包含的文档号并不是要过滤掉的文档号,而是过滤后需要的文档号。 FilterQuery所得到的结果集同两者取AND查询相同,只不过打分的时候,FilterQuery只考虑query的部分,不考虑filter的部分。 Filter包含很多种如下: 6.1、TermsFilter 其包含一个成员变量... 阅读全文
posted @ 2010-05-19 02:29 刘超觉先 阅读(6151) 评论(0) 推荐(1) 编辑
摘要: 为什么会产生这个异常: 使用Lucene检索过程中如果用到RangeQuery,PrefixQuery,WildcardQuery,FuzzyQuery这四种Query,可能会产生TooManyClauses异常。为什么会产生这个异常呢?举例说明: 以RangeQuery为例,如果日期范围为19990101到20091231,在索引文件中有19990102,19990103等等这些日期词组,那么RangeQuery会被扩展成“19990102 OR 19990103”,成了2个子句。可以想象,如果索引文件里面在这个时间段内的日期有很多,那么就会产生很多子句。 PrefixQuery等也是同样的 阅读全文
posted @ 2010-05-16 00:29 刘超觉先 阅读(2122) 评论(2) 推荐(1) 编辑
摘要: 经常需要Kill多个进程,这些进程包含共同的关键字,可以用一条命令Kill掉它们。 ps aux | grep "common" | cut –c 9-15 | xargs kill –9 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令: "ps aux" 查看所有进程的命令。这时检索出的进程将作为下一条命令grep "common"的输入。 "grep "common" 选出所有含有关键字"common"的进程。 &q 阅读全文
posted @ 2010-05-16 00:18 刘超觉先 阅读(7889) 评论(0) 推荐(0) 编辑
摘要: 三、解析QueryParser.jj3.1、声明QueryParser类在QueryParser.jj文件中,PARSER_BEGIN(QueryParser)和PARSER_END(QueryParser)之间,定义了QueryParser类。其中最重要的一个函数是public Query parse(String query)函数,也即我们解析Lucene查询语法的时候调用的函数。这是一个纯Java代码定义的函数,会直接拷贝到QueryParser.java文件中。parse函数中,最重要的一行代码是调用Query res = TopLevelQuery(field),而TopLevelQ 阅读全文
posted @ 2010-05-08 00:21 刘超觉先 阅读(7288) 评论(0) 推荐(4) 编辑
摘要: 一、Lucene的查询语法Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html(1) 语法关键字+ - && || ! ( ) { } [ ] ^ " ~ * ? : \如果所要查询的查询词中本身包含关键字,则需要用\进行转义(2) 查询词(Term)Lucene支持两种查询词,一种是单一查询词,如"hello",一种是词组(phrase),如"hello world"。(3) 查询域(Field)在查询语句中,可以指定从哪个域中寻找 阅读全文
posted @ 2010-05-08 00:20 刘超觉先 阅读(13424) 评论(1) 推荐(6) 编辑
摘要: 信息检索这个词的含义非常广。仅从钱包中取出信用卡,然后输入信用卡号也属于信息检索的范畴。然而,从学术角度来讲,信息检索定义如下: 信息检索即从大量非结构化文档集中找到满足需要的文档的过程。 按照如上定义,信息检索曾经是仅少数人如图书管理员,律师,专业搜索者参与的活动。而今非昔比,当今成千上万的人每天都会用搜索引擎搜索网页和邮件。信息检索正迅速取代传统的数据库搜索的方式,成为信息获取的主要方式。除此之外,信息检索技术还可以解决其他有关数据和信息的问题。所谓非结构化数据,指的是没有清晰的可被计算机理解的语义结构的数据。与之相对的是结构化数据,例如传统的关系型数据库,被很多公司用来保存产品库存及员工 阅读全文
posted @ 2010-05-01 20:57 刘超觉先 阅读(3546) 评论(0) 推荐(2) 编辑
摘要: 五种进程间通信的方式: 共享内存(shared memory):其允许多个进程通过读写同一块内存地址来相互通信。 内存映射(Mapped memory):其和共享内存相似,然而它是和文件系统上的一个文件相关联的。 管道(Pipe):其允许一个进程到另一个相关进程的顺序通信。 先入先出队列(FIFO):和管道类似,然而因为其对应于文件系统上的文件名,可以在两个不相关的进程间通信。 Socket:其允许在不同的计算机上的不同进程间通信。 1、共享内存(Shared Memory) 共享内存时进程间通信方式中最快的一种,因为进程是共享同一块内存。 内核并不提供对共享内存访问... 阅读全文
posted @ 2010-04-29 00:24 刘超觉先 阅读(2270) 评论(0) 推荐(0) 编辑
摘要: 要想使用POSIX标准线程API(pthreads),需要连接libpthread.so库到程序中。 1、创建线程 进程中的每个线程都有一个线程号,类型为pthread_t。 用pthread_self函数可以返回当前线程的线程号。 线程号之间的比较可以用函数pthread_equal。 if (!pthread_equal (pthread_self (), other_thread)) pthread_join (other_thread, NULL); 每个线程执行一个线程函数: void * function(void *) 用函数pthr... 阅读全文
posted @ 2010-04-27 00:08 刘超觉先 阅读(1945) 评论(0) 推荐(0) 编辑
摘要: 每个进程都有一个唯一的进程号。 每个进程都有一个父进程。 系统中的进程以树的形式组织,init进程(进程号为1)作为根。 进程0是调度进程,没有程序与之对应,是内核的一部分。 进程1是init进程,是在系统启动的阶段由内核启动的,对应/sbin/init程序,是普通的用户进程。 程序中可以通过getpid()得到进程号,通过getppid()得到父进程的进程号。 #include <stdio.h> #include <unistd.h> int main () { printf (“The process ID is %d\n”, (int) getpid... 阅读全文
posted @ 2010-04-25 21:46 刘超觉先 阅读(1562) 评论(0) 推荐(1) 编辑
摘要: 1、同运行环境交互1.1、命令行当一个程序从shell启动的时候,其参数列表包括程序名称及所有的命令行参数% ls -s /其参数列表包含三项:第一项是程序名称ls,第二项和第三项分别是两个命令行参数,-s和/main函数可以通过argc和argv两个参数来访问命令行参数列表:argc是命令行参数的个数,argv是命令行参数字符串指针所组成的数组#include <stdio.h>int main (int argc, char* argv[]){ printf (“The name of this program is ‘%s’.\n”, argv[0]); printf (“T 阅读全文
posted @ 2010-04-25 00:23 刘超觉先 阅读(1229) 评论(0) 推荐(1) 编辑