2016-04-27 5 views
0

HBaseは、個々のレコードのリアルタイムアクセス用の大きなデータストアとして、HBaseに格納されたデータの検索用のSolrとして使用しています。SolrのHBaseテーブルのバージョニングされた列をインデックスする方法

以前の値を保持できるように、HBaseテーブルの列にバージョンを追加したいとします。たとえば、VERSIONS => 5カラムにcust_info:addressを設定して、顧客の最後の5つのアドレスを保持します。示すように

私は

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

私はSolrの内のレコードを検索し、それはアドレスの唯一の最新の更新された値を示し、Solrのコレクションののschema.xmlファイル内の同等のフィールドを作成しました。私は顧客の5つの住所すべてで検索したい。

対応するSolrフィールドにこのテーブルの複数バージョンの列をインデックス化して保存するにはどうすればよいですか?

答えて

0

私は、HBaseとsolrで同じことをするための別の方法を見つけました。 cust_info:addressの列にバージョンを追加する代わりに、必要に応じてHbaseに複数の列を追加します。 HBaseはスキーマフリーなので、列ファミリに必要な数の列を追加できます。追加カラムcust_info:addr1、cust_info:addr2、cust_info:addr3、cust_info:addr4、cust_info:addr5存在する場合は5つのアドレスを挿入します。 Solrので

<dynamicField name="addr*" type="text_general" indexed="true" stored="true"/> 

今すぐADDR1、ADDR2、ADDR3、ADDR4、ADDR4、ADDR5としてSolrの文書内の5つのフィールドがあるだろう示すように、のschema.xmlファイルでダイナミックなフィールドを作成。これらのフィールドはすべて検索できます。

OR

あなたがADDR1、ADDR2、のような複数のアドレスフィールドを作成したくない場合は...次のようcopyFieldでそれを行うことができます。

  1. 多値を作成します。たとえば、address
  2. から始まるすべてのフィールドに一致する動的フィールドaddr*を作成します。addr
  3. addr* addressにフィールド例えば

と一致するすべてのフィールドをコピーしますcopyFieldを作成します。

<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で検索する必要があるため、以前のものよりもはるかに簡単に照会することができます。

関連する問題