1

我正在尝试在 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 为行键使用自定义比较器(不知道如何执行此操作)。

4

1 回答 1

1

如果您希望 hbase 对它们进行正确排序,则需要使用不同的方法将值序列化为 byte[]。查看https://github.com/ndimiduk/orderly。或者,我相信 Lily 库也可以做到这一点。

于 2012-11-16T00:00:32.523 回答