abh*_*bhi 3 indexing dynamic cassandra hector
我一直在尝试使用下面的行集创建索引.
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);
Run Code Online (Sandbox Code Playgroud)
但我无法这样做.实际上我动态地将数据存储在列中,并动态创建这些列,然后为了更好的查询目的,我试图将索引放在某些特定的列上.有任何建议请如何做到这一点.
它最终很简单.您只需在定义columnfamily时创建二级索引.在上面的代码中,所有操作都是在对象索引上完成的,该索引必须在定义时才创建.添加索引的步骤是
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
Run Code Online (Sandbox Code Playgroud)
辅助方法代码来自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;
}
Run Code Online (Sandbox Code Playgroud)
可在此处找到比较器的参考
我希望它会对你有所帮助.