关于Lucene的一点感想
研究了一下Lucene,发现其实检索可以这么简单地做!Lucene提供了一种反向检索的方式,,反向索引是一种以索引项为中心来组织文档的方式,每个索引项指向一个文档序列,这个序列中的文档都包含该索引项。相反,在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。你可以利用反向索引轻松的找到那些文档包含了特定的索引项。
Lucene中出现的术语整理了一下:
Analyzer:分词器,是一个抽象类,需要有特定的实现,这个是lucene的核心类,所有的检索的一句都是这个实现决定的。
IndexWriter :索引写入类,构造方法IndexWriter(Directory d, IndexWriterConfig conf)
IndexWriterConfig:索引配置类,设置不同的属性值,可以实现索引的写入方式(新建,追加,覆盖)构造方法IndexWriterConfig(Version matchVersion, Analyzer analyzer),与一个分词器相关联。
Document:描述一个索引的基本元素,索引文件的单位。
Field:索引域,可以把索引信息当做一个表格,Document就是整个表格,Field即是表格的列。内容包括key_value键值对。
IndexReader:索引读取类,IndexReader.open(FSDirectory.open(new File(index))); 需要使用FSDirectory打开索引文件,貌似只有这样才能使Lucene的读取速度优化代码起作用。
IndexSearcher:检索类,以IndexReader构造。实用方法:public TopDocs search(Query query, Filter filter, int n),可以过滤文件
QueryParser:查询类,以new QueryParser(Version.LUCENE_31, field, analyzer); field是构造索引时的field的key值。比较实用的方法是public Query parse(String query),返回查询结果。
Query:QueryParser执行parse后的返回结果。
一次查询其实可以分为大的两个阶段(有点废话):1.构造索引文件2.通过索引文件检索信息
感觉可以把IndexWriter想象成一个数据库,Document是表格,Field是表格的列,然后这是个文件数据库系统。。。
实际上Lucene做的工作只是把预置的查询结果按特定格式保存起来,这点非常重要,建索引时指定的术语其实可以看做模糊的关键字,说白了,所有的想在时间上提速的工作归根结底需要用空间来换。
另外附一个Lucene的关键字列表(我分的):
分词(Analyzer),写索引(IndexWriter),读索引(IndexReader),文档(Document),域(Field),查询(Query),查找(Searcher),分页(Paging),得分(Score)
学习lucene可以从这些关键字展开。