来自 JSON 格式化字符串的 Elasticsearch 查询?
Elasticsearch query from JSON formatted string?
我正在使用 Elasticsearch,我需要从存储为 JSON 格式字符串的文档中查询值。
是否有任何选项可以查询存储 JSON 格式字符串的 Elasticsearch 表单?
请看我的用例
我正在将我的应用程序数据保存在 Cassandra 中并将这些数据复制到弹性搜索(我正在使用 elassandra 捆绑版本)。但是在 Cassandra 中,我有一个带有 list<text>
的字段,它包含 JSON 带有嵌套 JSON 对象的数组。
当我将 Cassandra table 映射到 Elasticsearch 时(根据 elassandra 文档的建议),它将 Cassandra 字段名称映射为 Elasticsearch 中的 JSON 键,整个 JSON 数组被视为 JSON 格式化字符串.
现在我需要根据 JSON 中的键进行查询,该键在 Elasticsearch 中存储为 JSON 字符串。
请查看我存储在 Elasticsearch 中的数据示例:
{
"status": {
\"visibilityStatus\": true,
\"deleteStatus\": true
}
}
这里status是Cassandra字段名,remaining是一条记录的值
现在我需要搜索deleteStatus=true
的记录,请提供任何线索。
提前致谢
您应该将状态对象存储为由 UDT(Cassandra 用户定义类型)支持的 Elasticsearch 对象,然后,您将能够使用 elasticsearch 嵌套查询进行搜索。
您可以使用状态列的 UDT 和 auto-discover 映射创建您的 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 processor
elassandra 不支持摄取处理器,您应该使用建议的映射来索引您的 UDT。
谢谢。
我正在使用 Elasticsearch,我需要从存储为 JSON 格式字符串的文档中查询值。
是否有任何选项可以查询存储 JSON 格式字符串的 Elasticsearch 表单?
请看我的用例
我正在将我的应用程序数据保存在 Cassandra 中并将这些数据复制到弹性搜索(我正在使用 elassandra 捆绑版本)。但是在 Cassandra 中,我有一个带有 list<text>
的字段,它包含 JSON 带有嵌套 JSON 对象的数组。
当我将 Cassandra table 映射到 Elasticsearch 时(根据 elassandra 文档的建议),它将 Cassandra 字段名称映射为 Elasticsearch 中的 JSON 键,整个 JSON 数组被视为 JSON 格式化字符串.
现在我需要根据 JSON 中的键进行查询,该键在 Elasticsearch 中存储为 JSON 字符串。
请查看我存储在 Elasticsearch 中的数据示例:
{
"status": {
\"visibilityStatus\": true,
\"deleteStatus\": true
}
}
这里status是Cassandra字段名,remaining是一条记录的值
现在我需要搜索deleteStatus=true
的记录,请提供任何线索。
提前致谢
您应该将状态对象存储为由 UDT(Cassandra 用户定义类型)支持的 Elasticsearch 对象,然后,您将能够使用 elasticsearch 嵌套查询进行搜索。
您可以使用状态列的 UDT 和 auto-discover 映射创建您的 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 processor
elassandra 不支持摄取处理器,您应该使用建议的映射来索引您的 UDT。 谢谢。