2012-11-15 38 views
1

我试图在HBase中实现类似搜索引擎的功能。除了这个想法有多好(找出原因),我需要支持浮点值的“范围查询”。创建一个倒排索引是默认的方法,将浮点值映射到单独的数据结构中的行键。但是,为了使它成为索引,我需要能够从范围的低点发出扫描(至少,这是我现在的理论)。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

如果您希望hbase正确排序,您需要使用不同的方法将您的值序列化为byte []。退房https://github.com/ndimiduk/orderly。另外,我相信莉莉图书馆也可以做到这一点。

+0

该实现似乎比我的简单,感谢找到:) – akaIDIOT