lucene2.0学习文档二

下面讲一下索引的建立

     其实从上面的例子就可以看出建立索引就用到Document,IndexWriter,Field。 最简单的步骤就是:

     首先分别new 一个Document,IndexWriter,Field,然后用Doument.add()方法加入Field.其次用IndexWrtier.addDocument()
方法加入Document。 最后调用一下IndexWriter.close()方法关闭输入索引,这一步非常的重要只有调用这个方法索引才会被
写入索引的目录里,而这是被很多初学的人所忽略的。 Document没有什么好介绍的,把它的作用看成数据库中的一行记录就行。

Field是一个比较重要的也是比较复杂的,看一下它的构造函数有5个:

Field(String name, byte[] value, Field.Store store)
Field(String name, Reader reader)
Field(String name, Reader reader, Field.TermVector termVector)
Field (String name, String value, Field.Store store, Field.Index index)
Field (String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)

在Field中有三个内部类:Field.Index,Field.Store,Field.termVector,而构造函数也用到了它们。
注意:termVector是Lucene 1.4新增的,它提供一种向量机制来进行模糊查询,这个不常用。它们的不同的组合,在全文检索
中有着不同的作用。看看下面的表吧:
Field.Index
Field.Store
说明
TOKENIZED(分词)
YES
被分词索引且存储
TOKENIZED
NO
被分词索引但不存储
NO
YES
这是不能被搜索的,它只是被搜索内容的附属物。如URL等
UN_TOKENIZED
YES/NO
不被分词,它作为一个整体被搜索,搜一部分是搜不出来的
NO
NO
没有这种用法
而对于Field (String name, Reader reader)
Field (String name, Reader reader, Field.TermVector termVector)
       他们是Field.Index.TOKENIZED和Field.Store.NO的。这就是为什么我们在上面的例子中会出现文章的内容为 null了。因为它只是被索引了,而并没有被存储下来。如果一定要看到文章的内容的话可以通过文章的路径得到。毕竟文章的路径是作为搜索的附属物被搜索出来了。而我们在Web开发的时候一般是将大数据放在数据库中,不会放在文件系统中,更不会放在索引目录里,因为它太大了操作会加大服务器的负担。
下面介绍一下IndexWriter:
它就是一个写入索引的写入器,它的任务比较简单:
1.用addDocument()将已经准备好写入索引的document们加入
2.调用close()将索引写入索引目录

你可能感兴趣的:(Web,Lucene,全文检索)