Lucence基本概念

1.Lucene的Document
Document类似于数据库中的一条数据,Lucene是通过Document来跟各种物理文件或数据库文件通信的。
2.Lucene的Field
Field相当于数据库中一条数据的某个字段,我们可以直接通过FIELD创建一个该类型的对象。
他们直接的调用关系:
Document doc = new Document();

Field f1 = new Field("name1","value1",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(f1);

Field的各个属性:
Store.NO:表示Field不需要存储。
Store.YES:表示Field需要存储。
Store.COMPRESS:表示以压缩的方式来保存field的值。
Index有4个静态属性:
1.Index.NO:表示该Field不需要索引,也就是用户不需要去查找改field的值。
2.Index.TOKENIZED:表示该Field先被分词再索引。
3.Index.UN_TOKENIZED:表示不对该field进行分词,但要对他进行索引,也就是该field会被用户查找。
4.Index.NO_NORMS:表示对该FIELD进行索引,但是不使用analyzer,同时禁止他参加评分,主要是为了减少内存的消耗。
3.Lucene的Term

Term词条,索引将记录分词成一个一个的词条,然后保存在索引中,我们可以使用词条去搜索我们需要的结果。

用户构建完document.那么就要开始建立索引了。采用indexwriter.
例如:
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter writer = new IndexWriter(file,luceneAnalyzer,true);

他有三个构造函数:
public IndexWriter(String path,Analyzer a,boolean create)
public IndexWriter(File path,Analyzer a,boolean create)
public IndexWriter(Directory path,Analyzer a,boolean create)
这三个构造函数除了第一个参数不一样以后,其他都一样,表示索引的位置。第二个参数是一个ANALYZER对象,主要负责对各种输入数据源进行分析,包括过滤,分词等多种功能。第三个参数是一个BOOLEAN值,含义是:在由第一个参数所指定的路径处,删除原目录的所有内容重新构建索引,或是在其中已经存在的索引上追加新的DOCUMENT.

IndexWriter构建索引的流程:
1.初始化一个分析器对象,作为参数传入到writer中
2.传入建立索引的路径,即用户希望将索引文件存放的地方。
3.为该目录上锁。
4.判断用户希望把该索引目录下的原来的内容删去吗?
如果是:创建新的SEGMENT文件,并写入版本号,修改次数等信息。
如果否:读取原来的SEGMENT文件,读出版本号信息。
5.对象初始化完毕,通过writer.addDocument(doc);开始往指定目录写索引。

注意点:
1.在使用addDocument方法以后,一定要使用IndexWriter的CLOSE方法来关闭索引器,使所有的IO缓存中的数据都写入到磁盘中,关闭各种流。这样才能最终完成索引的创建。
2.限制每个FIELD中的词条数量。
对于建立的索引,有可能将很长的文本段都写入到FIELD中,然后作为索引进行存储,如果存入数据量过大,会抛出OUTOFMEMORY的异常。因此可以调用
public void setMaxFieldLength(int maxFieldLength)
例子:
writer.addDocument(doc);
writer.setMaxFieldLength(100000);
writer.addDocument(doc2);
当调用了该方法以后,LUCENE最多可以为FIELD内的10000个词条建立索引(如果不设置,默认为10000个。)

你可能感兴趣的:(Lucene)