Elasticsearch 8.10.2版本简单聚合查询记录

安装ik分词器。ik分词器的作者构建8.10.2的包,所以就先下载一个别的版本放在elasticsearch-8.10.2\plugins目录下,在pom.xml中修改版本号就可以了。

先准备数据

# 批量添加数据
PUT test_query
put test_query/_bulk
{"index": {"_index" : "test_query","_id":"1001"}}
{"id":"1001","name": "zhang san","age" : 30}
{"index": {"_index" : "test_query","_id":"1002"}}
{"id":"1002","name": "li si","age" : 40}
{"index": {"_index" : "test_query","_id":"1003"}}
{"id":"1003","name": "wang wu","age" : 50}
{"index": {"_index" : "test_query","_id":"1004"}}
{"id":"1004","name": "zhangsan","age" : 30}
{"index": {"_index" : "test_query","_id":"1005"}}
{"id":"1005","name": "lisi","age" : 40}
{"index": {"_index" : "test_query","_id":"1006"}}
{"id":"1006","name": "wangwu","age" : 50}

# 查询所有数据
GET test_query/_search
{
  "query":{
    "match_all": {}
  }
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": 1,
        "_source": {
          "id": "1001",
          "name": "zhang san",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": 1,
        "_source": {
          "id": "1002",
          "name": "li si",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1003",
        "_score": 1,
        "_source": {
          "id": "1003",
          "name": "wang wu",
          "age": 50
        }
      },
      {
        "_index": "test_query",
        "_id": "1004",
        "_score": 1,
        "_source": {
          "id": "1004",
          "name": "zhangsan",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1005",
        "_score": 1,
        "_source": {
          "id": "1005",
          "name": "lisi",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1006",
        "_score": 1,
        "_source": {
          "id": "1006",
          "name": "wangwu",
          "age": 50
        }
      }
    ]
  }
}

match是分词匹配查询,在上面添加数据的时候因为有空格所以Elasticsearch会认为是两个关键词



GET test_query/_search
{
  "query":{
    "match": {
      "name": "zhang li"
    }
  }
}

# 响应结果
{
  "took": 11,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1.3555918,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": 1.3555918,
        "_source": {
          "id": "1001",
          "name": "zhang san",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": 1.3555918,
        "_source": {
          "id": "1002",
          "name": "li si",
          "age": 40
        }
      }
    ]
  }
}

查询不出来,因为这是两个关键词

# 完整的关键词查询 
GET test_query/_search
{
  "query":{
    "term": {
      "name": {
        "value": "zhang san" 
      }
    }
  }
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 0,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  }
}

可以查询,因为这是完整的关键词

# 完整的关键词查询
GET test_query/_search
{
  "query":{
    "term": {
      "name": {
        "value": "zhangsan" 
      }
    }
  }
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.7836733,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1004",
        "_score": 1.7836733,
        "_source": {
          "id": "1004",
          "name": "zhangsan",
          "age": 30
        }
      }
    ]
  }
}

对查询结果的过滤

# 对查询结果的过滤
GET test_query/_search
{
  "_source": ["name","age"]
}

# 响应结果
{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": 1,
        "_source": {
          "name": "zhang san",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": 1,
        "_source": {
          "name": "li si",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1003",
        "_score": 1,
        "_source": {
          "name": "wang wu",
          "age": 50
        }
      },
      {
        "_index": "test_query",
        "_id": "1004",
        "_score": 1,
        "_source": {
          "name": "zhangsan",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1005",
        "_score": 1,
        "_source": {
          "name": "lisi",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1006",
        "_score": 1,
        "_source": {
          "name": "wangwu",
          "age": 50
        }
      }
    ]
  }
}

排序

# 排序
GET test_query/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1003",
        "_score": null,
        "_source": {
          "id": "1003",
          "name": "wang wu",
          "age": 50
        },
        "sort": [
          50
        ]
      },
      {
        "_index": "test_query",
        "_id": "1006",
        "_score": null,
        "_source": {
          "id": "1006",
          "name": "wangwu",
          "age": 50
        },
        "sort": [
          50
        ]
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": null,
        "_source": {
          "id": "1002",
          "name": "li si",
          "age": 40
        },
        "sort": [
          40
        ]
      },
      {
        "_index": "test_query",
        "_id": "1005",
        "_score": null,
        "_source": {
          "id": "1005",
          "name": "lisi",
          "age": 40
        },
        "sort": [
          40
        ]
      },
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": null,
        "_source": {
          "id": "1001",
          "name": "zhang san",
          "age": 30
        },
        "sort": [
          30
        ]
      },
      {
        "_index": "test_query",
        "_id": "1004",
        "_score": null,
        "_source": {
          "id": "1004",
          "name": "zhangsan",
          "age": 30
        },
        "sort": [
          30
        ]
      }
    ]
  }
}

组合查询

# 组合查询 or
GET test_query/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
            "name": "zhang"
          }
        },
        {
          "match": {
            "age": 40
          }
        }
      ]
    }
  }
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 1.3555918,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": 1.3555918,
        "_source": {
          "id": "1001",
          "name": "zhang san",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": 1,
        "_source": {
          "id": "1002",
          "name": "li si",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1005",
        "_score": 1,
        "_source": {
          "id": "1005",
          "name": "lisi",
          "age": 40
        }
      }
    ]
  }
}

显示原始数据的分组查询

# 分组查询
GET test_query/_search
{
  "aggs": {
    "ageGroup": {
      "terms": {
        "field": "age"
      }
    }
  }
}

# 响应结果
{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test_query",
        "_id": "1001",
        "_score": 1,
        "_source": {
          "id": "1001",
          "name": "zhang san",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1002",
        "_score": 1,
        "_source": {
          "id": "1002",
          "name": "li si",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1003",
        "_score": 1,
        "_source": {
          "id": "1003",
          "name": "wang wu",
          "age": 50
        }
      },
      {
        "_index": "test_query",
        "_id": "1004",
        "_score": 1,
        "_source": {
          "id": "1004",
          "name": "zhangsan",
          "age": 30
        }
      },
      {
        "_index": "test_query",
        "_id": "1005",
        "_score": 1,
        "_source": {
          "id": "1005",
          "name": "lisi",
          "age": 40
        }
      },
      {
        "_index": "test_query",
        "_id": "1006",
        "_score": 1,
        "_source": {
          "id": "1006",
          "name": "wangwu",
          "age": 50
        }
      }
    ]
  },
  "aggregations": {
    "ageGroup": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 30,
          "doc_count": 2
        },
        {
          "key": 40,
          "doc_count": 2
        },
        {
          "key": 50,
          "doc_count": 2
        }
      ]
    }
  }
}

不显示原始数据,只显示聚合结果

#不显示原始数据,只显示聚合结果
GET test_query/_search
{
  "aggs": {
    "ageGroup": {
      "terms": {
        "field": "age"
      }
    }
  },
  "size": 0
}

# 响应结果
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "ageGroup": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 30,
          "doc_count": 2
        },
        {
          "key": 40,
          "doc_count": 2
        },
        {
          "key": 50,
          "doc_count": 2
        }
      ]
    }
  }
}

分组之后求和

# 分组之后求和
GET test_query/_search
{
  "aggs": {
    "ageGroup": {
      "terms": {
        "field": "age"
      },
      "aggs": {
        "ageSum": {
          "sum": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}

# 响应结果
{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "ageGroup": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 30,
          "doc_count": 2,
          "ageSum": {
            "value": 60
          }
        },
        {
          "key": 40,
          "doc_count": 2,
          "ageSum": {
            "value": 80
          }
        },
        {
          "key": 50,
          "doc_count": 2,
          "ageSum": {
            "value": 100
          }
        }
      ]
    }
  }
}

求平均值

# 求平均值
GET test_query/_search
{
  "aggs": {
    "ageAvg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0
}

# 响应结果
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "ageAvg": {
      "value": 40
    }
  }
}

取前3名

# 取前3名
GET test_query/_search
{
  "aggs": {
    "top3": {
      "top_hits": {
        "size": 3
      }
    }
  },
  "size": 0
}

# 响应结果
{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "top3": {
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": 1,
        "hits": [
          {
            "_index": "test_query",
            "_id": "1001",
            "_score": 1,
            "_source": {
              "id": "1001",
              "name": "zhang san",
              "age": 30
            }
          },
          {
            "_index": "test_query",
            "_id": "1002",
            "_score": 1,
            "_source": {
              "id": "1002",
              "name": "li si",
              "age": 40
            }
          },
          {
            "_index": "test_query",
            "_id": "1003",
            "_score": 1,
            "_source": {
              "id": "1003",
              "name": "wang wu",
              "age": 50
            }
          }
        ]
      }
    }
  }
}

根据年龄排序取前3名

# 根据年龄排序取前3名
GET test_query/_search
{
  "aggs": {
    "ageTop3": {
      "top_hits": {
        "sort": [
          {
            "age":{
              "order": "desc"
            }
          }
        ], 
        "size": 3
      }
    }
  },
  "size": 0
}

# 响应结果
{
  "took": 16,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "ageTop3": {
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": null,
        "hits": [
          {
            "_index": "test_query",
            "_id": "1003",
            "_score": null,
            "_source": {
              "id": "1003",
              "name": "wang wu",
              "age": 50
            },
            "sort": [
              50
            ]
          },
          {
            "_index": "test_query",
            "_id": "1006",
            "_score": null,
            "_source": {
              "id": "1006",
              "name": "wangwu",
              "age": 50
            },
            "sort": [
              50
            ]
          },
          {
            "_index": "test_query",
            "_id": "1002",
            "_score": null,
            "_source": {
              "id": "1002",
              "name": "li si",
              "age": 40
            },
            "sort": [
              40
            ]
          }
        ]
      }
    }
  }
}

分词

# 分词
GET _analyze
{
  "analyzer":"ik_max_word",
  "text":["你好中国人"]
}

# 响应结果
{
  "tokens": [
    {
      "token": "你好",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "中国人",
      "start_offset": 2,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "中国",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "国人",
      "start_offset": 3,
      "end_offset": 5,
      "type": "CN_WORD",
      "position": 3
    }
  ]
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ming__GoGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值