lucene

Posted 仰望星空的程序

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lucene相关的知识,希望对你有一定的参考价值。

Lucene最初设计是实现全文检索功能, 即只处理字符串. 因此, 在处理数值时, Lucene也是将数值编码为字符串。


将数值转换成字符串, Lucene-5.2.0对应的实现类为org.apache.lucene.util.NumericUtils。


NumericUtils把Int类型数值编码为6byte字符串. 其中的1byte用于区别原数据类型为Int还是Long:

SHIFT_START_INT  = 0x60;SHIFT_START_LONG = 0x20;


另外的5byte表示原数的补码。但是负数的补码大于绝对值相同的正数的补码,这在排序上不合理。所以使用NumericUtils.intToPrefixCoded()对补码进行处理。


NumericUtils对Float类型处理机制如下: 将Float转成Int, 然后按照Int类型处理。那么Float如何转成Int呢,首先要了解计算机是如何存储浮点数.


IEEE 754-1985 将存储空间分成三个部分,从左到右(最高位到最低位)的顺序依次是:符号位(sign)、exponent(指数位)、fraction(分数位)。其中sign占1-bit, exponent占8-bit, fraction占23-bit。

------------------------------------------------|   0 |1000 0001 |010 0000 0000 0000 0000 0000 |------------------------------------------------|Sign | exponent |        fraction             |------------------------------------------------

上面的exponent是129,由于指数是以127为正负分界的,所以实际指数位是129-127=2

小数位由于是科学计数法,比如1.11自动忽略了前面的"1.",变成0.11。所以实际小数是1+2^(-2)=1.25

所以最终是1.25*2^2=5.0

以上是关于lucene的主要内容,如果未能解决你的问题,请参考以下文章

lucene demo代码

三搜索引擎篇-lucene入门代码示例

ElasticSearch 学习笔记一 简介

Lucene学习总结

Lucene分析

1. 初识 Lucene