12) 第二章 索引:规则(Norms)

    在索引阶段,文档(Document)中每个被索引的域(Field)都可能有一个优先权重因数(boost),它是一个浮点值。该值由三部分联合计算得到:文档自身的boost值;每个域的值;Lucene根据各词元在域中的频度算出的boost值;

    得到最终的boost值后,Lucene会通过一些巧妙的方法把它转换成一个字节,并将其存入文档的各个域。待到搜索阶段,每个被查询域的规则都将被加载到内存,将字节解码成浮点数并依此为该文档打分(打出的分数用来为文档排序)。

    使用规则时经常遭遇的一个问题是:查询期间的高内存消耗。原因很明显,每个文档的每个域的规则都要在内存中占用一个字节。如果你的索引文件很大,其中包含了大量的文档,而每个文档又包含了许多域,那么,大量内存的占用便是理所当然的!还好,你可以通过调用 Field.setOmitNorms(true); 将规则选项关掉,然而由于同时失去了boost的相关信息,这一操作可能对排序存在着潜在的影响。好在这种影响不大,尤其是当各个域的长度差不多时,或者是你根本没手动设置过boost值时。

    注意一点:你需要在索引之前关闭规则选项!如果你想在索引中途做此事,那么,你必选重建整个索引!

猜你喜欢

转载自bun-ny.iteye.com/blog/1074984
今日推荐