如何将具有二进制数据作为 SOLR 字段的 HBase 列编制索引



我需要索引存储在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 位十六进制数字的序列,但有没有一些好方法以这种方式映射?

收到的工作解决方案:

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

更新 1:

  • 添加了 HBase 索引器HBASE_INDEXER_CLASSPATH环境配置和其他类扩展com.ngdata.hbaseindexer.uniquekey.BaseUniqueKeyFormatter,该现在对唯一键执行 Base64 编码,以便可以将其声明为 BinaryField 。这终于完成了我要求索引器做的所有事情。因此,现在 SOLR 使用 Base64 编码的"id"字段和从其他所需列映射的字段接收正确的"更新"请求。

更新 2:

  • 在玩够了solr.BinaryField之后,我对我需要按原样索引的所有内容都solr.StrField了。对于二进制字节字符串(如哈希(,它们被转换为小写十六进制数字序列,每个字节 2 位。也许在性能方面不是最好的,但看起来最便携和灵活。对于"刚刚存储"的字段,我已经有 Base64 编码器,但如果我不索引它们,我就不会在 SOLR 中输入字段。

最新更新