2

Solr と Cassandra を (DSE 経由で) 使用しています。Cassandra のデータの 1 つのエントリ (行) を次に示します。

ORDER_INFO_CF
 -orderHistoryID=1000072459
   -SPECIAL_COLUMN_KEY=0800000002||1294034400000|113942

次の schema.xml を使用して、問題なく Cassandra データのインデックスを作成できます。

<schema name="ORDER_INFO_CF" version="1.1">
 <types>
  <fieldType name="string" class="solr.StrField"/>
  <fieldType name="text" class="solr.TextField">
    <analyzer><tokenizer class="solr.WikipediaTokenizerFactory"/></analyzer>
  </fieldType>
 </types>
 <fields>
    <field name="orderHistoryID"  type="string" indexed="true"  stored="true"/>
    <field name="SPECIAL_COLUMN_KEY"  type="text" indexed="true"  stored="true"/>
 </fields>

もちろん、すべてのデータをパイプで区切られた 1 つの文字列にまとめても、あまり役に立ちません。そこで、次のように PatternTokenizerFactory を使用して分割しようとしました (schema.xml):

<schema name="ORDER_INFO_CF" version="1.1">
 <types>
  <fieldType name="string" class="solr.StrField" />
  <fieldType name="splitField" class="solr.TextField">
   <analyzer><tokenizer class="solr.PatternTokenizerFactory" pattern="|" /></analyzer>
  </fieldType>
 </types>
 <fields>
    <field name="orderHistoryID"  type="string" indexed="true"  stored="true"/>
    <field name="AccountNumber"  type="splitField" indexed="true"  stored="true"/>
    <field name="ActionFlag"  type="splitField" indexed="false"  stored="true"/>
    <field name="CreatedDate"  type="splitField" indexed="true"  stored="true"/>
    <field name="CreatedTime"  type="splitField" indexed="true"  stored="true"/>
 </fields>

orderHistoryID はまだマッピングされていますが、SPECIAL_COLUMN_KEY値は上記の 4 つのフィールドに分割されていません。私は、PatternTokenizerFactory. も見ましたDataImportHandler RegexTransformerが、RDBMS と XML のインポートでのみ機能するようです。

基本的に、私のデータ マップは Solr では次のようになります。

orderHistoryID=1000072459
SPECIAL_COLUMN_KEY=0800000002||1294034400000|113942

そして、私はそれを次のようにマッピングしようとしています:

orderHistoryID=1000072459
AccountNumber=0800000002
ActionFlag=
CreatedDate=1294034400000
CreatedTime=113942

誰かが私を正しい方向に向けてもらえますか?

4

1 に答える 1

1

この問題を解決する簡単な方法は、Solrjを使用することです。cassandraからレコードを読み取るためのAPIがすでにあると仮定すると、Solrjを使用してそれをsolrにフィードできます。

もう1つの方法は、カスタムPOJOを作成してからを使用することです。例えば ​​-

import org.apache.solr.client.solrj.beans.Field;

public class CustomRecord {
   @Field
   private String orderHistoryID;
   @Field
   private String AccountNumber;
   @Field
   private String ActionFlag;
   @Field
   private String CreatedDate;
   @Field
   private String CreatedTime;
}

その後、

SolrServer server = new HttpSolrServer("http://HOST:8983/solr/");
server.addBean(customRecord);

詳細については、solrにpojoを直接追加するを参照してください。

于 2013-02-03T10:34:49.170 に答える