2016-04-27 66 views
0

我使用HBase作为大数据存储来实时访问单个记录和Solr以搜索存储在HBase中的数据。如何在Solr中索引版本化的HBase表的列

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

我已经在Solr中收集的schema.xml中文件中创建一个等效场如图所示,

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

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

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

回答

0

我发现了一个与HBase和solr做同样事情的替代战略。不要将版本添加到列cust_info:地址,而是根据需要在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。您可以搜索所有这些字段。

OR

如果您不希望创建多个地址字段,如ADDR1,ADDR2,...你可以用copyField做到如下:

  1. 创建一个多值字段,例如,address
  2. 创建一个动态字段addr*,它将匹配所有开始的字段 与addr
  3. 创建copyField,将复制所有领域与addr*address

例如匹配

<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搜索这种方式使得查询比前一个要容易得多。