在Lucene2.0中是通过两个内部类Field.Index,Field.Store的组合来区分Field的具体类型.具体如下:
Field.Store.YES:保存,用户需要显示该Field值。
Field.Store.NO:不保存 ,用户不需要显示该Field值。
Field.Index.NO:不建立索引 ,用户不需要查找该Field的值。
Field.Index.TOKENIZED:先分词再建索引 ,可以通过部分关键字搜索。
Field.Index.UN_TOKENIZED:不分词但要建索引 ,一般表示该值是一个整体,如人名,日期等。
Field.Index.NO_NORMS:不分词,需要建索引.但是Field的值不像通常那样被保存,而是只取一个byte,这样节约,主要是为了减少内存消耗。
要注意的是:Field.Index和Field.Store互不相关,两个值可以任意组合。
如:
new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED); //表示书名被保存并被分词索引,搜索到结果后可以把书名显示给用户(Store.YES),并且可以通过部分关键字搜索到该书名(Index.TOKENIZED)如:“钢铁”。
new Field("bookname","钢铁是怎样炼成的",Field.Store.NO,Field.Index.TOKENIZED); //表示书名不被保存但被分词索引,搜索到结果后不能显示书名(Store.NO),但可以通过部分关键字搜索到该书名(Index.TOKENIZED)如:“钢铁”。
new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.UN_TOKENIZED); //表示书名被保存并被索引但不分词,搜索到结果后可以把书名显示给用户(Store.YES),但不可以通过部分关键字搜索到该书名(Index.UN_TOKENIZED)如:“钢铁”,只能通过完整名称搜索。
new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.NO); //表示书名被保存但不被索引,搜索到结果后可以把书名显示给用户(Store.YES),但不可以通过书名(Index.NO)搜索。