- 浏览: 53321 次
- 性别:
- 来自: 杭州
最新评论
-
aixuebo:
写的非常不错,看后很清晰。谢谢了,解决了我很多疑问
nutch generator 详解
文章列表
http://www.cnblogs.com/feng_013/archive/2010/07/22/1783228.html
http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
http://eclipse-tools.sourceforge.net/implementors/
eclispe alt+f3
OpenBitSet和OpenBitSetIterator在TermRangeQuery中的运用
在MultiTermQuery 的rewrite方法中,如果 if (pendingTerms.size() >= termCountLimit || docVisitCount >= docCountCutoff) 的就会使用MultiTermQueryWrapperFilter,如果查询出来的term的总数目大于termCountLimit或者docVisitCount是 df ,如果df 大于docCountCutoff 则使用MultiTermQueryWrapperFi ...
OpenBitSet和OpenBitSetIterator
算法的思想是用一个long的数组的index和这个这个数组的某个值的某一位表示一个数,如果是一个long数组,如果不存在重复的情况下,最大可达到64倍的压缩,
算法的实现过程以long OpenBitSet这个类实现的一个上面提到的记录数据的数组
public OpenBitSet(long numBits) {
bits = new long[bits2words(numBits)]; //根据指定的长度创建数组
wlen = bits.length; //记录数组的长度
}
//计算数组的长度,给定 ...
大致的事情就是读取segment.gen文件,从这个文件里面的数据找出segments_x(x是下一个段的名字,是一个36进制的数)这个文件,读segments_x这个文件,因为segment_x记录的索引的segment的元数据信息,读取segment信息后,在分别初始化每个segment的reader对象SegmentReader,SegmentReader会利用内部类CoreReaders,来完成文件的打开和读取,
1 构建FieldInfos,会通过SimpleFSIndexInput对象读取_x.fnm的信息到内存里面,放在list和map里面,map是为了可以利用field的name ...
多个term查询的步骤
分别查找每个term对应的结果
查询步骤
Term :a -----》tii-------》tis-------》frg 保存结果 --- TermScorer1
Term :b -----》tii-------》tis-------》frg 保存结果--- TermScorer2
得到结果集分别缓存在TermScorer二个数 ...
Lucene的排序是通过FieldComparator及其子类实现的,以StringOrdValComparator作为例子详细说明lucene的排序的基于缓存FieldCache实现。
思路:用一个数组保存某个filed字段对应的所有的document的最大的一个term。这个数组的index就是docId,值对应所有这个filed所有term的数组的index
StringOrdValComparator 类里面的
private String[] lookup; 值为某个filed的所有的term的值
private int[] order; index为docId,值为 ...
DefaultSkipListReader查找docId
MultiLevelSkipListReader
public MultiLevelSkipListReader(IndexInput skipStream, int maxSkipLevels, int skipInterval) {
/**每个层的文件文件的IndexInput读取对象,是通过定位到每个文件的相对应的skiptable的位置层的位置,clone下就得 ...
document的写入是通过DocFieldProcessorPerThread类做的,实际上在lucene的文件里面(_x.fdx,_x.fdt,_x.fnm)没有document的概念,存储的是filed属性和值,filed的值是存储在_x.fdt文件里面 ,field的属性是存在在_x.fnm,(属性就是是否分词,是否存储等等) 而field的写入是通过DocFieldProcessorPerThread.processDocument实现的,这个方法里面会遍历索引的filed,并创建DocFieldProcessorPerField 实现写入的
摘自org.apache.lucene.index.DocumentsWriter.DefaultIndexingChain.getChain() 注释
/*
This is the current indexing chain:
DocConsumer / DocConsumerPerThread
--> code: DocFieldProcessor / DocFieldProcessorPerThread
--> DocFieldConsumer / DocFieldConsumerPerThread / D ...
最近在学习lucene,看的比较迷糊,所以 就把类图画了
今天看avro ,说zig-zag编码 看了半天终于明白。
value hex
0 00
-1 01
1 02
-2 03
2 04
...
-64 7f
64 80 01
...
文档上例子如上面,所以继续编码
那么 -3 的编码是05 3的编码是06,
算法是(n << 1) ^ (n >> 31) 来自
http://code.google.com/apis/protocolbuffers/docs/encoding.html#types
乱码的 解决
jboss_home\server\default\deploy\jboss-web.deployer
server.xml Connector 添加 URIEncoding="UTF-8" useBodyEncodingForURI="true"/>