2016-04-27 64 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搜索這種方式使得查詢比前一個要容易得多。