【问题标题】:Splitting/Mapping Cassandra concatenated values into Solr fields将 Cassandra 连接的值拆分/映射到 Solr 字段中
【发布时间】:2012-08-16 03:50:58
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: solr cassandra datastax-enterprise


    【解决方案1】:

    解决此问题的更简单方法是使用 Solrj 。假设您已经有一个从 cassandra 读取记录的 api,您将能够使用 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

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2019-05-04
      • 2019-05-13
      • 2021-01-16
      相关资源
      最近更新 更多