我正在尝试在HBase中实现类似搜索引擎的功能。除了这个想法有多好(发现是这样做的原因),我需要支持浮点值的“范围查询”。创建反向索引将是执行此操作的默认方式,将浮点值映射到单独数据结构中的行键。然而,为了使其成为索引,我需要能够从范围的低点到高点发出扫描(至少,这是我目前的理论)。
由于HBase按字节数组排序,以浮点开始一个行键不会得到一个可用的索引,如果只是因为浮点数的字节表示中的第一位是负值而且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为行键使用自定义比较器(不知道怎么做)。
答案 0 :(得分:1)
如果希望hbase正确对它们进行排序,则需要使用不同的方法将值序列化为byte []。查看https://github.com/ndimiduk/orderly。 或者,我相信Lily库也可以这样做。