有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试在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对行键使用自定义比较器(不知道如何做到这一点)


共 (1) 个答案

  1. # 1 楼答案

    如果希望hbase对值进行正确排序,则需要使用不同的方法将值序列化为字节[]。签出https://github.com/ndimiduk/orderly。 另外,我相信Lily图书馆也可以做到这一点