【问题标题】:How to index versioned column of HBase table in Solr如何在 Solr 中索引 HBase 表的版本化列
【发布时间】:2016-08-21 12:42:04
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: indexing solr lucene hbase


    【解决方案1】:

    我找到了一种替代策略,可以用 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 中进行搜索。

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多