Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货

  • 时间:
  • 浏览:2
  • 来源:大发uu快3_uu快3骗局_大发uu快3骗局

Elasticsearch 有一点数据类型,大致如下:

  • 基本数据类型:
    • string 类型。ES 7.x 中,string 类型会升级为:text 和 keyword。keyword 能都能能都能能了排序;text 默认分词,能都能能了能都能能了排序。
    • 数据类型:integer、long 等
    • 时间类型、布尔类型、二进制类型、区间类型等
  • 繁杂数据类型:
    • 数组类型:Array
    • 对象类型:Object
    • Nested 类型
  • 特定数据类型:地理位置、IP 等

注意:tring/nested/array 类型字段能都能能了用作排序字段。已经 string 类型会升级为:text 和 keyword。keyword 能都能能都能能了排序,text 默认分词,能都能能了能都能能了排序。

2.1 那什么是 Nested 类型?

Elasticsearch 7.x 文档中,曾经写到:

The nested type is a specialised version of the object datatype that allows arrays of objects to be indexed in a way that they can be queried independently of each other.

Nested (嵌套)类型,是特殊的对象类型,特殊的地方是索引对象数组法律辦法 不同,允许数组中的对象各人地进行索引。目的是对象之间彼此独立被查询出来。

2.2 怎么使用 Nested 类型?

在 ES 的 my_index 索引中存储 users 字段。比如说:

{
  "group" : "fans",
  "users" : [
    {
      "name" : "John",
      "age" :  "23"
    },
    {
      "name" : "Alice",
      "age" :  "18"
    }
  ]
}

我我确实存储看上去跟 Object 类型一样,只不过底层原理对数组 users 字段索引法律辦法 不同。设置 users 字段的索引法律辦法 Nested 嵌套类型:

curl -X PUT "localhost:91000/my_index" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "users": {
        "type": "nested" 
      }
    }
  }
}
'

比如小老弟我有一波小粉丝,users 字段类型是 object。存储如下:

{
  "group" : "bysocket_fans",
  "users" : [
    {
      "name" : "John",
      "age" :  "23"
    },
    {
      "name" : "Alice",
      "age" :  "18"
    }
  ]
}

{
  "group" : "路人甲_fans",
  "users" : [
    {
      "name" : "Alice",
      "age" :  "22"
    },
    {
      "name" : "Jeff",
      "age" :  "18"
    }
  ]
}

比如 18 岁大姑娘 Alice 是小老弟我的粉丝,她也意味着着是周杰伦的粉丝。那这边都能能 兩个 多 需求,即应用场景:

怎么找到 18 岁大姑娘 Alice {"name" : "Alice","age" :  "18"} 关注的所有明星呢?

意味着着用老的查询一段话是曾经搜索的:

GET /my_index/_search?pretty
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "users.name": "Alice"
          }
        },
        {
          "match": {
            "users.age": 18
          }
        }
      ]
    }
  }
}

结果发现结果是不对的,路人甲 这条记录也经常突然出现了。

意味着着匹配到了第兩个 多 Alice + 第六个 Jeff 的 18。一点这一 查询不满足这一 场景

能都能能了 都能能 使用 Nested 类型并用 Nested 查询,即让数组中的对象各人地进行索引。目的是对象之间彼此独立被查询出来。

3.1 设置 Nested 类型

根据 2.2 怎么使用 Nested 类型,将 users 字段类型从 object 修改为 nested:

curl -X PUT "localhost:91000/my_index" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "properties": {
      "users": {
        "type": "nested" 
      }
    }
  }
}
'

3.2 Nested Query

修改后,对应的 Nested Query ,如下:

GET /my_index/_search?pretty
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "users",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "users.name": "Alice"
                    }
                  },
                  {
                    "match": {
                      "users.age": 18
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

语法很简单已经 我:

  • key 以 "nested" 开头
  • path 已经 我嵌套对象数组的字段名
  • 一点
    • score_mode (可选的)匹配子对象的分数相关性分数。avg (默认,使用所有匹配子对象的平均相关性分数)
    • ignore_unmapped (可选的)与非 忽略 path 未映射,不返回任何文档而都能能 错误。默认为 false,意味着着 path 不对就报错

曾经查询得结果已经 我对的。

这边测试过,给一点人兩个 多 测试报告和建议。

压测环境:3 个 server ,6 个 ES 节点

压测结论: 使用上小节查询一段话,1000 并发情況下,意味着着千兆网卡被打满了。TPS 10000 左右,意味着着提高并发,就会增加 RT。一点意味着着高性能大流量情況下,都能能 用 Nested 应该从网络流量方向进行优化。二者,尽量减少大数据对象的返回

建议:泥瓦匠建议,你听听看

  • 性能:Common Query 远远大于 Nested Query 远远大于 Parent/Child Query
  • 性能优化:首先考虑减少上面四种 Query
  • 性能优化:Nested Query 业务能都能能都能能了优化下。比如上一小节删剪能都能能都能能了多存兩个 多 fanIds 数组。搜索两次,第一次查选泽 18 岁大姑娘 Alice 的 fanId,第二次根据 fanId 搜索即可
  • 性能优化:我我确实能都能能了 律辦法 ,高性能大流量情況下,都能能 用 Nested 应该从网络流量方向进行优化。二者,尽量减少大数据对象的返回

(完)

参考资料:

  • https://blog.csdn.net/laoyang31000/article/details/8291000393
  • https://www.elastic.co/guide/en/elasticsearch/reference/7.2/search-aggregations-bucket-reverse-nested-aggregation.html

猜你喜欢

大话三国三国续正式版版下载

游戏简介 大话三国三国续官方版是一款画面非常精美的多人在线即时pk手游大作,万人实时在线,上演宏大的攻城略地,丰富的策略玩法,出色的打击感、酷爽的PVP对决,让他体验到畅快格斗

2020-01-23

维拉弗兰卡VS因苏布里亚免费视频直播,维拉弗兰卡VS因苏布里亚比赛集锦,维拉弗兰卡VS因苏布里亚录像,维拉弗兰卡VS因苏布里亚首发阵容

首页新闻视频直播数据APP懂球号直播君广告媒体媒体合作维拉弗兰卡03-0321:100意丁1-1已刚刚结速因苏布里亚直播君|分析|集锦暂无数据近期比赛伯恩茅斯英超3-1布莱顿阿

2020-01-23

力巨人集成灶:让厨房清净如新的秘密竟然是它!

这几年,开放式厨房橱柜假使 造型好看,又能显得房子的空间宽敞,获得了太久年轻一代的喜爱。但都不 不少反对的声音认为,开放式设计加重了厨房橱柜的油烟和无尘室有哪些的难题,成为

2020-01-22

微软Excel/PowerPoint安卓版Google Play商店下载量双双破5亿

IT之家8月25日消息 微软的Office三件套(Word、Excel、PowerPoint)系列软件在办公学习一族间无缘无故受到欢迎。微软也仍然执行着在广泛的平台上推广软件的

2020-01-22

国外网友发布锤子坚果Pro 2手机root教程:解锁更多玩法

IT之家4月21日消息 去年11月,锤子科技在成都举行了2017秋季新品发布会,会上正式发布了坚果Pro2代。该机采用了时下流行的全面屏设计,售价1799元起。目前,有国外女女

2020-01-22