Java HBase中辅助浮点索引的排序顺序

Java HBase中辅助浮点索引的排序顺序,java,floating-point,indexing,hbase,endianness,Java,Floating Point,Indexing,Hbase,Endianness,我正在尝试在HBase中实现类似搜索引擎的功能。除了这是一个多么好的主意(找出这样做的原因),我还需要支持浮点值的“范围查询”。创建反向索引是实现这一点的默认方法,将浮点值映射到单独数据结构中的行键。然而,为了使其作为索引工作,我需要能够从范围的低点到高点进行扫描(至少,这是我目前的理论) 由于HBase按字节数组排序,如果浮点数的字节表示形式中的第一位为1表示负值,0表示正值(这超出了浮点值顺序),则以浮点值开始的行键将无法获得可用的索引。因此,我不知道如何创建这个索引 我是在用一种愚蠢的方法

我正在尝试在HBase中实现类似搜索引擎的功能。除了这是一个多么好的主意(找出这样做的原因),我还需要支持浮点值的“范围查询”。创建反向索引是实现这一点的默认方法,将浮点值映射到单独数据结构中的行键。然而,为了使其作为索引工作,我需要能够从范围的低点到高点进行扫描(至少,这是我目前的理论)

由于HBase按字节数组排序,如果浮点数的字节表示形式中的第一位为1表示负值,0表示正值(这超出了浮点值顺序),则以浮点值开始的行键将无法获得可用的索引。因此,我不知道如何创建这个索引

我是在用一种愚蠢的方法来解决这个问题,还是下面的方法会更好

将浮点转换为两个整数值,一个在小数点之前,一个在小数点之后:

BigDecimal[] doubleValue = 
    new BigDecimal((Double) value).divideAndRemainder(BigDecimal.ONE);
byte[] valueBytes = new byte[16];
System.arraycopy(Bytes.toBytes(doubleValue[0].longValue()), 0, valueBytes, 0, 8);
System.arraycopy(Bytes.toBytes(doubleValue[1].longValue()), 0, valueBytes, 8, 8);

以某种方式说服HBase对行键使用自定义比较器(不知道如何做)。

如果希望HBase对值进行正确排序,则需要使用不同的方法将值序列化为字节[]。退房
或者,我相信Lily库也可以做到这一点。

如果希望hbase对值进行正确排序,则需要使用不同的方法将值序列化到byte[]中。退房
或者,我相信Lily库也可以做到这一点。

该实现似乎比我的实现简单,感谢您的发现:)该实现似乎比我的实现简单,感谢您的发现:)