【问题标题】:How to create secondary index in Cassandra Hector API programmatically如何以编程方式在 Cassandra Hector API 中创建二级索引
【发布时间】:2012-05-01 16:39:16
【问题描述】:

我一直在尝试使用以下行创建索引。

 KeyspaceDefinition fromCluster = cluster.describeKeyspace(KEYSPACE);
 ColumnFamilyDefinition cfDef = fromCluster.getCfDefs().get(0);
 BasicColumnFamilyDefinition columnFamilyDefinition = newBasicColumnFamilyDefinition(cfDef); 
 BasicColumnDefinition columnDefinition = new BasicColumnDefinition();
 columnDefinition.setName(StringSerializer.get().toByteBuffer("A_NO"));    
 columnDefinition.setIndexName("A_NO_idx");
 columnDefinition.setIndexType(ColumnIndexType.KEYS);   
 columnDefinition.setValidationClass(ComparatorType.UTF8TYPE.getClassName());
 columnFamilyDefinition.addColumnDefinition(columnDefinition);

但我做不到。实际上,我动态地将数据存储在列中,并动态地创建这些列,之后为了更好的查询目的,我试图在某些特定列上放置索引。任何建议请如何做到这一点。

【问题讨论】:

  • 好吧,我已经知道该怎么做。

标签: dynamic indexing cassandra hector


【解决方案1】:

它最终很简单。您只需要在定义列族时创建二级索引。在上面的代码中,所有的操作都是在对象索引上完成的,该索引必须在定义时创建。添加索引的步骤是

    List<ColumnDef> columns = new ArrayList<ColumnDef>();
    columns.add(newIndexedColumnDef("columnName", "UTF8Type"));
    List<ColumnDefinition> columnMetadata = ThriftColumnDef
            .fromThriftList(columns);
    cdefs.add(cf_def);    //cf_def is your columnfamily definition

辅助方法代码来自KeyspaceCreationTest

    public ColumnDef newIndexedColumnDef(String     column_name, String     comparer){
        ColumnDef cd = new ColumnDef(se.toByteBuffer(column_name), comparer);
        cd.setIndex_name(column_name);
        cd.setIndex_type(IndexType.KEYS);
        return cd;
    }       

比较器的参考可以找到here

希望对你有帮助。

【讨论】:

猜你喜欢
  • 2012-09-06
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多