我需要索引存储在hbase行中的数据。显而易见的解决方案是通过复制使用lilyhbase索引器,并将结果推送到solr集合中。
问题的根源是我的hbase行中有一些“短二进制”列,如md5、crc64、uuid等。我当然把它们当作生的来储存 byte[]
它节省了我很多空间。但我需要根据存储实际表示的一些标准对数据进行索引。如何以正确的方式做到这一点?
目前我只在solr看到 BinaryField
视情况选择solr字段类型。但它要求hbase列内容是base64编码的,而lily hbase indexer看起来不像是支持这一点的解决方案。
我通过lily hbase indexer看到的唯一选项是将列Map配置为 bigDecimal
. 在这种情况下适用吗?据我所知 string
这本身不是一种选择。
如果我使用morphline,我可以基于 extractHBaseCells
来自cloudera和type的命令 byte[]
它被承诺只是透明的管道。但我应该如何处理提取的列数据来接收solr二进制字段呢?
Map后,如何保存索引中这样一个二进制字段的词典顺序?我会考虑选择Map byte[]
作为2位十六进制数的序列,但有什么好的方法来Map这种方式吗?
1条答案
按热度按时间kkbh8khc1#
收到的工作溶液:
lily hbase索引器配置为
row
Map类型。结果是文档id(唯一键)是hbase行键。带有二进制数据的hbase行键在本例中是基于lily hbase索引器配置进行格式化的,其中unique key formatter设置为“com.ngdata.hbaseindexer.uniquekey.hexuniquekeyformatter”。这个结果将文档id('id')solr字段作为匹配行键二进制表示的小写十六进制数字字符串序列。也许可以更好,但至少工作如预期。注意“id”solr字段在这里是string类型。
二元细胞的变形线变换基于
extractHBaseCells
来自cloudera搜索的命令。类型Mapbyte[]
用于恰好生成base64编码字段。更新1:
补充
HBASE_INDEXER_CLASSPATH
hbase索引器和附加类扩展的环境配置com.ngdata.hbaseindexer.uniquekey.BaseUniqueKeyFormatter
它现在对唯一密钥执行base64编码,因此可以声明为BinaryField
. 这终于完成了我对索引器的所有要求。因此,现在solr接收到正确的'update'请求,其中包含base64编码的'id'字段和从其他所需列Map的字段。更新2:
玩够了之后
solr.BinaryField
我来只是为了简单solr.StrField
所有我需要索引的东西。对于二进制字节字符串(如哈希),它们被转换为小写十六进制数字序列,每个字节2位。也许在性能方面不是最好的,但看起来最便携和灵活。对于'just stored'字段,我已经有base64编码器,但如果不索引它们,我就不会在solr中显示字段。