elasticsearch 来自JSON格式字符串的Elasticsearch查询?,elasticsearch,cassandra,elassandra,elasticsearch,Cassandra,Elassandra" /> elasticsearch 来自JSON格式字符串的Elasticsearch查询?,elasticsearch,cassandra,elassandra,elasticsearch,Cassandra,Elassandra" />

elasticsearch 来自JSON格式字符串的Elasticsearch查询?

elasticsearch 来自JSON格式字符串的Elasticsearch查询?,elasticsearch,cassandra,elassandra,elasticsearch,Cassandra,Elassandra,我正在使用Elasticsearch,我需要从存储为JSON格式字符串的文档中查询值 是否有任何选项可以查询存储JSON格式字符串的Elasticsearch表单 请查看我的用例 我将我的应用程序数据保存在Cassandra中,并将这些数据复制到elastic search(我使用捆绑版本)。但是在Cassandra中,我有一个带有list的字段,它包含带有嵌套JSON对象的JSON数组 当我将Cassandra表映射到Elasticsearch时(根据elassandra doc的建议),它将

我正在使用Elasticsearch,我需要从存储为JSON格式字符串的文档中查询值

是否有任何选项可以查询存储JSON格式字符串的Elasticsearch表单

请查看我的用例

我将我的应用程序数据保存在Cassandra中,并将这些数据复制到elastic search(我使用捆绑版本)。但是在Cassandra中,我有一个带有
list
的字段,它包含带有嵌套JSON对象的JSON数组

当我将Cassandra表映射到Elasticsearch时(根据elassandra doc的建议),它将Cassandra字段名映射为Elasticsearch中的JSON键,并将整个JSON数组视为JSON格式的字符串

现在我需要根据JSON中的键进行查询,该键在Elasticsearch中存储为JSON字符串

请参阅Elasticsearch中存储的我的数据示例:

    {
    "status": {
        \"visibilityStatus\": true,
        \"deleteStatus\": true
    }
}
此处状态为Cassandra字段名,剩余为一条记录的值

现在我需要用
deleteStatus=true
搜索记录,请提供任何线索


提前感谢

您应该将您的状态对象存储为一个由UDT(Cassandra用户定义类型)支持的Elasticsearch对象,然后,您将能够使用Elasticsearch嵌套查询进行搜索

您可以使用状态列的UDT创建cassandra模式,并自动发现映射,或者指定elasticsearch映射以生成CQL模式。可选的cql_udt_名称允许命名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();

我不确定我的解决方案是否适合您


如果elassandra不支持Ingest processor,则应使用建议的映射为UDT编制索引。
谢谢。

您有一个已经以JSON格式存在的查询,您想在代码中使用该JSON来查询ES吗?您能更具体一点吗?也许能提供一点代码?我更新了我的问题,请看我的使用案例。谢谢。它对我有用,谢谢:)接受答案