拆分/映射Cassandra将值连接到Solr字段中

时间:2012-08-20 19:42:06

标签: solr cassandra datastax-enterprise

我正在使用Solr和Cassandra(通过DSE)。这是Cassandra中的一个数据条目(行):

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>

当然,将所有数据集中到一个以管道分隔的字符串中并没有多大帮助。所以我尝试使用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值未被分割为上述四个字段。我确信我只是没有用PatternTokenizerFactory做正确的事情。我还查看了DataImportHandler RegexTransformer,但这似乎只适用于RDBMS和XML导入。

基本上,我的数据在Solr中映射如下:

orderHistoryID=1000072459
SPECIAL_COLUMN_KEY=0800000002||1294034400000|113942

我正试图让它像这样映射:

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

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

解决此问题的更简单方法是使用Solrj。假设你已经有一个api来读取cassandra的记录,你可以使用Solrj将它提供给solr。

另一种方法是创建自定义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);

有关详细信息,请参阅directly adding pojos to solr