Lucene
jollyjumper
一点记录
展开
-
Lucene中如何判断是否使用cfs格式
IndexWriter会根据MergePolicy.useCompoundFile(SegmentInfos, SegmentInfoPerCommit)的返回结果判断一个段是否使用cfs格式。典型的逻辑查看TieredMergePolicy。原创 2014-09-20 22:27:40 · 1353 阅读 · 0 评论 -
Lucene41中的PackedInts
ackedInts中提供了两种format,一个是Packed,可按long或字节对齐,另一个是PACKED_SINGLE_BLOCK.可以按照不同overheadRatio来选择对应FormatAndBits,调用fastestFormatAndBits就可以。另外这个文件提供了ecoder,Encoder,Reader,ReaderIterator,Mutable等接口。实现了Muta原创 2014-09-21 17:44:49 · 1322 阅读 · 0 评论 -
Lucene BooleanQuery实现
BooleanScorer 只有OR条件的打分,打分只在一个2K documents的窗口中进行,每次拿到的doc不是顺序的,所以只用在top level query其他在BooleanScorer2中处理,多个And条件串成一个ConjunctionScorer,总是先advance最短的链,多个OR条件构成DisjunctionScorer,required条件和not条件使用ReqExc原创 2016-01-26 17:02:46 · 1030 阅读 · 0 评论 -
identityHashCode, WeakReference,ReferenceQueue和Lucene WeakIdentityMap
identityHashCode:具有不变性,对象产生后identityHashCode不变,通过保存在对象头的mark word中实现,一般占25字节,故一个对象产生之后identityHashCode总是不变:http://stackoverflow.com/questions/1063068/how-does-the-jvm-ensure-that-system-identityha原创 2016-04-18 14:16:01 · 648 阅读 · 0 评论 -
Lucene4.0 BufferedDeletes
缓存一个segment要删除的Term,Query或docId,一旦需要flush,则转换为FrozenDeletes。主要的数据成员:Map terms // 要删除的term和docIDUpto映射AtomicInteger numDeletes // 删除的term数量,注意不是terms.size(),重复的term多次累加Map queries // 要删除的que原创 2016-08-06 00:19:44 · 284 阅读 · 0 评论 -
Lucene 4.0 DocumentsWriterDeleteQueue
里面是一个非阻塞队列,仅保存尾巴(头在globalDeleteSlice中保存),外加一个BufferedDeletes。每次删除之后都会调tryApplyGlobalSlice将队列中的内容apply到BufferedDeletes中,从而清空全局队列,newSlice之后的队列是调用方自己维护。这里还有一个很潮的AtomicReferenceFieldUpdater用于原子更新对象中的原创 2016-08-06 00:48:51 · 709 阅读 · 1 评论 -
Lucene 4.0 FrozenBufferedDeletes
其实存储的内容基本跟BufferedDeletes一样,只不过因为不需要修改了,所以存储更紧凑一点,多数成员是final。具体是:PrefixCodedTerms terms;int termCount;Query[] queries;int[] queryLimits;int bytesUsed;int numDeletes;long gen;PrefixCo原创 2016-08-06 01:02:54 · 301 阅读 · 0 评论 -
Lucene的深度分页支持
即searchAfter方法,在一直往下翻页时不需要准备一个爆大对堆,必须传一个ScoreDocs对象进去,不能传起始位置,这就是其优缺点。原创 2016-08-25 19:01:19 · 1238 阅读 · 0 评论 -
Skip Lists: A Probabilistic Alternative to Balanced Trees
原文:http://people.csail.mit.edu/shanir/publications/OPODIS2006-BA.pdf最近不断听说常用跳表实现内存索引(leveldb/redis/hbase), 研究了这篇1990的论文,跳表一种比平衡树和伸展树空间更节约、更易于实现且非常高效的数据结构。原来认识到的只是静态跳表,动态跳表则是每次随机确定一个level,概率上非常高效原创 2017-09-26 22:45:59 · 848 阅读 · 0 评论