我正在使用 Elasticsearch,我需要从存储为 JSON 格式字符串的文档中查询值。
是否有任何选项可以查询存储 JSON 格式字符串的 Elasticsearch 表单?
请看我的用例
我正在 Cassandra 中保存我的应用程序数据并将这些数据复制到 Elasticsearch (我使用的是 elassandra 捆绑版本)。但是在 Cassandra 中,我有一个带有 list<text>
的字段,它包含带有嵌套 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_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();
关于来自 JSON 格式字符串的 Elasticsearch 查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49048260/