我正在使用弹性搜索,我需要从存储为JSON格式字符串的文档中查询值。
是否有任何选项可以查询存储JSON格式字符串的表单弹性搜索?
请参阅我的用例
我正在Cassandra中保存我的应用程序数据并将这些数据复制到弹性搜索(我正在使用elassandra捆绑版本)。但是在Cassandra中,我有一个带有列表的字段,它包含嵌套的JSON数组JSON对象。
当我将Cassandra表映射到弹性搜索时(根据elassandra doc的建议),它将Cassandra字段名称映射为弹性搜索中的JSON键,并将整个JSON数组视为JSON格式字符串。
现在我需要根据JSON中的密钥进行查询,这些密钥在弹性搜索中存储为JSON字符串。
请参阅弹性搜索中存储的数据样本
{
"status": {
\"visibilityStatus\": true,
\"deleteStatus\": true
}
}
此状态为Cassandra字段名称,剩余为一条记录的值。
现在我需要使用deleteStatus = true搜索记录,任何线索,请。
提前致谢
答案 0 :(得分:1)
您应该将状态对象存储为由UDT(Cassandra用户定义类型)支持的Elasticsearch对象,然后,您将能够使用elasticsearch嵌套查询进行搜索。
您可以使用状态列的UDT创建cassandra架构并自动发现映射,或指定elasticsearch映射以生成CQL架构。可选的cql_udt_name允许命名UDT名称,如下所示:
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
.startObject("id").field("type", "keyword").field("cql_collection", "singleton").field("cql_primary_key_order", 0).field("cql_partition_key", true).endObject()
.startObject("event_timestamp")
.field("type", "date")
.field("format", "strict_date_hour_minute_second||epoch_millis")
.field("cql_collection", "singleton")
.endObject()
.startObject("event_info")
.field("type", "nested")
.field("cql_collection", "singleton")
.field("cql_udt_name", "event_info_udt")
.field("dynamic", "false")
.startObject("properties")
.startObject("event_timestamp")
.field("type", "date")
.field("format", "strict_date_hour_minute_second||epoch_millis")
.field("cql_collection", "singleton")
.endObject()
.endObject()
.endObject()
.endObject()
.endObject();
答案 1 :(得分:1)
我不确定我的解决方案是否合适。
您可以尝试使用JSON processor
答案 2 :(得分:0)