在Cassandra

时间:2016-02-23 09:31:21

标签: cassandra spring-data-cassandra

我有一个无架构的json对象,我希望使用spring-cassandra存储在Cassandra DB中。我了解到Cassandra支持Map类型,但Cassandra并不接受Map<String, Object>作为数据模型。

我需要查询json的字段,因此将其存储为blob是不可能的。无论如何我能做到吗?

PS:我看过Storing JSON object in CASSANDRA,答案似乎不适用于我的用例,因为我的json可能非常复杂。

2 个答案:

答案 0 :(得分:0)

您是否看过UDT(用户定义类型)?

您可以像这样定义UDT:

CREATE TYPE my_json(
   property1 text,
   property2 int,
   property3 map<text, text>,
   property4 map<int, another_json_type>,
   ...
)

然后在Java中使用Map<String, UserType>

注意:UserType来自Java驱动程序:https://github.com/datastax/java-driver/blob/2.1/driver-core/src/main/java/com/datastax/driver/core/UserType.java

您无法在Java中创建用户类型,只能从表格的元数据中获取,请参阅:https://github.com/datastax/java-driver/blob/3.0/driver-core/src/test/java/com/datastax/driver/core/UserTypesTest.java#L62-L81

答案 1 :(得分:0)

1)我的一个解决方案是,首先整合solr搜索并索引此表。

2)稍后编写一个solr分析器来解析json并在索引时放入solr中的各个字段。

3)下一步是使用solr支持的查询,例如select * from table where solr_query =“{search expression syntax}”