文章分类 - BoBo-Zoie-Lucene
学习中的点点记录,有些只是暂时的随笔并未整理,可能会有些错误,欢饮大家斧正.....^_^
摘要:注:这两年做数据仓库以及数据处理,发现其实很多搜索中的东西在数据处理、adhoc等一些场景中也是同样适用的,淘宝的mkdrill其实就是将分布式搜索引擎用来做数据的检索(原始数据很大但是结果集很小的场景)。 将自己前两年做搜索的流程以及中的问题整理整理下,先写个框架,后续会慢慢更新~~ 再不写,真的...
阅读全文
摘要:这个类的关于consume() 和 flushBuffer()方法的等待调用比较绕逻辑 。package proj.zoie.impl.indexing;import java.util.Collection;import java.util.LinkedList;import org.apache.log4j.Logger;import proj.zoie.api.DataConsumer;import proj.zoie.api.ZoieException;/** * 数据的消费者,由ZoieSystem来继承,实际的的数据消费者 ,由StreamDataProvider.start().
阅读全文
摘要:1、zoie在运行是需要实例化的对象有:StreamDataProvider、ZoieSystem(也是一个消费者) 。2、在StreamDataProvider中积累数据,然后调用StreamDataProvider的start()方法,该方法会启动一个消费StreamDataProvider中数据的线程DataThread<V> 。3、然后DataThread<V>会去处理StreamDataProvider中的数据,通过不断调用StreamDataProvider.next()方法来取得数据,当取到一定的数量(就是beachSize)后会调用ZoieSystem的
阅读全文
摘要:1、zoie中需要自己继承StreamDataProvider<T>来实现自己系统中的一个数据提供的处理者 。 T为自己系统中需要处理的数据的泛型 。2、StreamDataProvider自己并不会自动启动消费数据,继承类在实例化时候,需要给其注入消费者实例(一般为ZoieSystem),若不注入则无法消费数据 。3、然后在系统的运行中需要线程定时 或者 其它方法去调用StreamDataProvider<T>的start()方法,然后其在start()中其中一个消费数据的线程(该线程持有StreamDataProvider的实例对象)。
阅读全文
摘要:该类的作用同Bobo中的com.browseengine.bobo.util.BoundedPriorityQueue作用一样 。 1、构造一个存储有序但容量固定的数组,数组中数据按升序排列 。 可以向该PriorityQueue中插入数据,但这个数据比最小的那个数据小时,则不插入这个数据 。当数据大于最小的那个数据(top()得到)时候,提出最小的那个数据,然后有序插入到相应的位置 。源代码以及注释如下 :/** A PriorityQueue maintains a partial ordering of its elements such that the least element c
阅读全文
摘要:一般通过IndexSearch.explain(query,docId)----》weight.explain(reader, doc) 方法得到一个文档的评分的具体信息 。Explanation的信息如下:4.803122= (MATCH) fieldWeight(keywords:奶粉 in457), product of:2.0= tf(termFreq(keywords:奶粉)=4)4.803122= idf(docFreq=414, maxDocs=18609)0.5= fieldNorm(field=keywords, doc=457)第一行表示总得分:document(docId
阅读全文
摘要:org.apache.lucene.search.DocIdSetIteratorpackage org.apache.lucene.search;import java.io.IOException;/** * This abstract class defines methods to iterate over a set of * non-decreasing doc ids. * 提供一个访问id的迭代器的接口 。 */public abstract class DocIdSetIterator { /** Returns the current document number. &l
阅读全文
摘要:两个索引是不一样的,一个是基于硬盘上的index.dic来打开的索引(相当于lucene中基本的打开索引文件夹得到的索引),一个是直接在内存中的索引,搜索时为保证完整性,会在两个中都搜索。 但添加时只添加到内存索引中,因为效率的问题(在内存中操作事件极短),添加后会立刻重新读入索引,以便添加后可以立刻搜索到 。 当内存中索引添加到一定的量时,会将在内存中的这这一部分合并到硬盘中 ,然后在重新打开硬盘索引,这个中间会有一些无缝的延时或者不完整搜索 。
阅读全文