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

How to index versioned column of HBase table in Solr

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

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

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

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

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

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

我找到了一种替代策略,可以用 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 字段

例如

<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