如何索引Solr中HBase表的版本化列

时间:2016-04-27 09:43:25

标签: indexing solr lucene hbase

我使用HBase作为大数据存储来实时访问单个记录,而Solr用于搜索存储在HBase中的数据。

我想将版本添加到HBase表的列中,以便它也可以保存以前的值。例如,我设置参数 VERSIONS => cust_info:地址,以便保留客户的最后五个地址。

我在Solr集合的 schema.xml 文件中创建了一个等效字段,如图所示,

<field name="address" type="text_general" indexed="true" stored="true" multiValued="true"/>

当我在Solr中搜索记录时,它仅显示最新更新的地址值。我想在所有五个客户地址中进行搜索。

如何在相应的Solr字段中索引和存储表的多版本列?

1 个答案:

答案 0 :(得分:0)

我找到了用HBase和solr做同样事情的另一种策略。而不是将版本添加到列 cust_info:address ,而是根据需要在Hbase中添加多个列。由于HBase是无架构的,因此您可以在列族中添加任意数量的列。添加列 cust_info:addr1,cust_info:addr2,cust_info:addr3,cust_info:addr4,cust_info:addr5 以插入五个地址(如果存在)。

在Solr中,在 schema.xml 文件中创建一个动态字段,如图所示

<dynamicField name="addr*" type="text_general" indexed="true" stored="true"/>

现在,Solr文档中将有五个字段为 addr1,addr2,addr3,addr4,addr4,addr5 。您可以搜索所有这些字段。

如果您不想创建多个地址字段,例如 addr1,addr2,... ,您可以使用copyField执行以下操作:

  1. 创建多值字段,例如address
  2. 创建一个匹配所有字段的动态字段addr* addr
  3. 创建一个copyField,用于复制与addr*匹配的所有字段 到address字段
  4. E.g。

    <field name="address" type="text_general" indexed="true" stored="true" multiValued="true"/>
    
    <dynamicField name="addr*" type="text_general" indexed="false" stored="false"/>
    
    <copyField source="addr*" dest="address"/>
    

    这种方式使查询比以前更简单,因为您只需要搜索单个字段address