如何使用二进制数据索引HBase列作为SOLR字段?

时间:2014-07-18 19:27:36

标签: indexing solr lucene hbase nosql

我需要索引存储在HBase行中的数据。明显的解决方案是通过复制使用Lily HBase索引器并将结果推送到SOLR集合中。

我的问题的根源是我有一些短的二进制文件'我的HBase行中的列,如MD5,CRC64,UUID等。当然,我将它们存储为原始byte[]表示,这为我节省了大量空间。但我需要根据存储实际表示的一些此类标准来索引数据。如何以正确的方式这样做?

  • 目前我在SOLR中只看到BinaryField SOLR字段类型。但它要求HBase列内容为Base64编码,Lily HBase索引器看起来不像支持这一点的解决方案。
  • 我通过Lily HBase索引器看到的唯一选项是将列映射为bigDecimal。它适用于这种情况吗?据我所知,string本身不是一种选择。
  • 如果我使用MorphLine,我可以基于Cloudera的extractHBaseCells命令并输入byte[],它被承诺只是透明管道。但是,我应该如何处理提取的列数据以接收SOLR二进制字段?
  • 映射后如何在索引中保存这样的二进制字段的词典顺序?我考虑选择将byte[]映射为2位十六进制数字的序列,但是有一些好方法可以这样映射吗?

1 个答案:

答案 0 :(得分:3)

收到工作解决方案:

  • Lily HBase索引器配置为row映射类型。结果是文档ID(唯一键)是HBase行键。
  • 在这种情况下,基于Lily HBase索引器配置格式化具有二进制数据的HBase行密钥,其中唯一密钥格式化程序设置为" com.ngdata.hbaseindexer.uniquekey.HexUniqueKeyFormatter`。这导致文档ID(' id')SOLR字段作为匹配行键二进制表示的小写十六进制数字字符串的序列。可能会更好但至少按预期工作。注意' id' SOLR字段的类型为字符串。
  • 二元单元格由Morphline根据Cloudera Search的{​​{1}}命令进行转换。使用类型extractHBaseCells的映射恰好产生了Base64编码的字段。

更新1:

  • 为HBase索引器和其他扩展byte[]的类添加了HBASE_INDEXER_CLASSPATH环境配置,现在对唯一键执行Base64编码,因此可以将其声明为com.ngdata.hbaseindexer.uniquekey.BaseUniqueKeyFormatter。这终于完成了我从索引器那里得到的所有东西。所以现在SOLR收到正确的更新'使用Base64编码的' id'从其他所需列映射的字段和字段。

更新2:

  • 在使用BinaryField播放得足够之后,我只是简单地solr.BinaryField找到了我需要索引的所有内容。在二进制字节字符串(如散列)的情况下,它们被转换为小写十六进制数字的序列,每字节2个数字。可能不是性能方面最好的,但看起来最便携和灵活。对于刚刚存储的'字段我已经有了Base64编码器,但如果我没有索引它,我就不会在SOLR中输入字段。