将ES中的json字符串转为可以搜索的字段

解决的问题/使用场景:

字符串字段中的JSON数据也能够被搜索

有个索引RequestLog记录客户端请求log

RequestLog {

        String time; // 请求时间

        String params; // 请求参数,json格式的字符串

        xxxx

}

由于无法确定请求参数包含的所有属性,所以建立索引时无法确定字段。

此时,将 params 字段的es数据类型设置为flattened 即可在数据进入es时,自动展开json中的所有字段。

具体操作如下

在Elasticsearch中,如果你有一个字段存储了JSON格式的字符串,你可以使用内置的flattened数据类型将其转换为可搜索的对象。flattened数据类型能够自动展开嵌套的JSON对象,使其中的字段可以被单独索引和查询。

示例:

假设你有一个名为my_index的索引,其中包含一个名为json_field的字段,该字段存储了JSON格式的字符串:

  1. 创建映射

PUT my_index
{
  "mappings": {
    "properties": {
      "json_field": {
        "type": "flattened"
      }
    }
  }
}

在上面的映射中,我们将json_field字段的类型设置为flattened

  1. 索引一个文档

PUT my_index/_doc/1
{
  "json_field": "{\"a\": 1, \"b\": {\"c\": 2}}"
}

在这个示例中,我们索引了一个包含JSON字符串的文档。

  1. 查询文档

现在,你可以像查询普通字段一样查询JSON字段中的键值对:

GET my_index/_search
{
  "query": {
    "term": {
      "json_field.a": 1
    }
  }
}
GET my_index/_search
{
  "query": {
    "term": {
      "json_field.b.c": 2
    }
  }
}

以上查询将返回包含a=1b.c=2的文档。

结语

使用flattened数据类型,Elasticsearch能够自动展开嵌套的JSON对象,并将其中的字段作为单独的字段进行索引和查询。这使得存储在单个字符串字段中的JSON数据也能够被高效地搜索。 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值