我使用HBase作为大数据存储来实时访问单个记录,而Solr用于搜索存储在HBase中的数据。
我想将版本添加到HBase表的列中,以便它也可以保存以前的值。例如,我设置参数 VERSIONS => 列 cust_info:地址,以便保留客户的最后五个地址。
我在Solr集合的 schema.xml 文件中创建了一个等效字段,如图所示,
<field name="address" type="text_general" indexed="true" stored="true" multiValued="true"/>
当我在Solr中搜索记录时,它仅显示最新更新的地址值。我想在所有五个客户地址中进行搜索。
如何在相应的Solr字段中索引和存储表的多版本列?
答案 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执行以下操作:
address
addr*
addr
addr*
匹配的所有字段
到address
字段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
。