我有一个无架构的json对象,我希望使用spring-cassandra存储在Cassandra DB中。我了解到Cassandra支持Map类型,但Cassandra并不接受Map<String, Object>
作为数据模型。
我需要查询json的字段,因此将其存储为blob是不可能的。无论如何我能做到吗?
PS:我看过Storing JSON object in CASSANDRA,答案似乎不适用于我的用例,因为我的json可能非常复杂。
答案 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}”