如何索引solr中hbase表的版本列

yrwegjxp  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(414)

我使用hbase作为大数据存储,用于实时访问单个记录,solr用于搜索hbase中存储的数据。
我想向hbase表的一列添加版本,以便它也可以保存以前的值。例如,我为cust列设置参数versions=>5_info:address so 保留客户的最后五个地址。
我在solr集合的schema.xml文件中创建了一个等价字段,如图所示,

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

在solr中搜索记录时,它只显示地址的最新更新值。我想搜索所有五个客户地址。
如何在相应的solr字段中索引和存储表的这个多版本列?

j7dteeu8

j7dteeu81#

我找到了另一种策略,可以用hbase和solr做同样的事情。而不是向列cust添加版本_info:address,根据需要在hbase中添加多列。由于hbase是无模式的,因此可以在列族中添加任意数量的列。添加列cust_info:addr1,客户_info:addr2,客户_info:addr3,客户_info:addr4,客户_info:addr5 to 插入五个地址(如果存在)。
在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 创建一个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 .

相关问题