lucene结构详解之二域 (Field)的元数据信息 (.fnm)

域 (Field)的元数据信息 (.fnm) 

一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm 文件中,.fnm 文件格式如下


 1.FNMVersion  
 是 fnm文件的版本号,对于 Lucene 2.9为-2  
 2.FieldsCount  
 域的数目  
3. 一个数组的域(Fields)  
1)  FieldName:域名,如"title","modified","content"等。  
2)FieldBits:一系列标志位,表明对此域的索引方式 

 最低位:1 表示此域被索引,0 则不被索引。所谓被索引,也即放到倒排表中去。  
 仅仅被索引的域才能够被搜到。  
 Field.Index.NO则表示不被索引。  
 Field.Index.ANALYZED 则表示不但被索引,而且被分词,比如索引"hello world"后,无论是搜"hello",还是搜"world"都能够被搜到。  
 Field.Index.NOT_ANALYZED表示虽然被索引,但是不分词,比如索引"hello world"后,仅当搜"hello world"时,能够搜到,搜"hello"和搜"world"都搜不到。   

 3)一个域出了能够被索引,还能够被存储,仅仅被存储的域是搜索不到但是能通过文档号查到,多用于不想被搜索到,但是在通过其它域能够索到的情况下,能够随着文档号返回给用户的域。  
4) Field.Store.Yes则表示存储此域,Field.Store.NO则表示不存储此域。 

5)倒数第二位:1 表示保存词向量,0 为不保存
 Field.TermVector.YES表示保存词向量。 
 Field.TermVector.NO表示不保存词向量。
6)倒数第三位:1 表示在词向量中保存位置信息
 Field.TermVector.WITH_POSITIONS  
7)倒数第四位:1 表示在词向量中保存偏移量信
 Field.TermVector.WITH_OFFSETS  
8)倒数第五位:1 表示不保存标准化因子  
 Field.Index.ANALYZED_NO_NORMS  
 Field.Index.NOT_ANALYZED_NO_NORMS 
9)倒数第六位:是否保存 payload  

4.位置(Position)和偏移量(Offset)的区别  
 位置是基于词 Term的,偏移量是基于字母或汉字的。  

5. payload的使用  
 1)我们知道,索引是以倒排表形式存储的,对于每一个词,都保存了包含这个词的一个链表,当然为了加快查询速度,此链表多用跳跃表进行存储。  
 2)Payload 信息就是存储在倒排表中的,同文档号一起存放,多用于存储与每篇文档相关的一些信息。当然这部分信息也可以存储域里(stored Field),两者从功能上基
本是一样的,然而当要存储的信息很多的时候,存放在倒排表影响词的评分  
 3)在 Similarity 抽象类中有函数 public float scorePayload(byte [] payload, int offset, int length)   可以根据 payload的值影响评分。  里,利用跳跃表,有利于大大提高搜索速度。  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值