Elasticsearch

4.1 查表

4.1.1 1.查全部表名

GET /_cat/indices?index=*

4.1.2 2.根据关键字段查询表名

GET /_cat/indices?index=*perf*

4.1.3 3.查看表字段和所有信息[两种方法]

查询全部。就像select * from table_name一样。

GET /131_ops-web-perf_1/_search
GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  }
}

4.2 查字段

4.2.1 1.根据字段查询

  • 查询 fom 字段存在 gu 的用法
GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}
  • 这种的 使用match_phrase
GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国"
      }
    }
  }
}
  • 使用模糊搜索可以用match_phrase_prefix
GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
    }
  }
}

4.2.2 2.多个字段中查询

使用must来限制两个字段(值)中必须同时含有关键字

GET t3/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "beautiful"
          }
        },
        {
          "match": {
            "desc": "beautiful"
          }
        }
      ]
    }
  }
}

4.2.3 小结:

  • match:返回所有匹配的分词。
  • match_all:查询全部。
  • match_phrase:短语查询,在match的基础上进一步查询词组,可以指定slop分词间隔。

4.3 排序查询

  • 排序查询:sort

4.3.1 1.降序:desc

查询顾府都有哪些人,并根据age字段按照降序,并且,我只想看nmaeage字段:

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

结果的最下面会增加

        "sort" : [
          22
        ]

4.3.2 2.升序:asc

GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

4.3.3 3.注意:

在排序的过程中,只能使用可排序的属性进行排序。那么可以排序的属性有哪些呢?

  • 数字
  • 日期

其他的都不行!

4.4 结果过滤:_source

在所有的结果中,我只需要查看nameage两个属性,其他的不要

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "name": "顾老二"
    }
  },
  "_source": ["name", "age"]
}

4.5 聚合函数

聚合函数大家都不陌生,elasticsearch中也没玩出新花样,所以,这一章相对简单,只需要记得:

  • avg
  • max
  • min
  • sum

4.5.1 平均avg

需求是查询fromgu的人的平均年龄。

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "_source": ["name", "age"]
}

不想看都有哪些数据,只想看平均值怎么办?别忘了size!

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_avg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0, 
  "_source": ["name", "age"]
}

"size": 0 ---表示以上不展示

4.5.2 最大值max

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0
}

4.5.3 最小值min

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_min": {
      "min": {
        "field": "age"
      }
    }
  },
  "size": 0
}

返回结果如下:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "my_min" : {
      "value" : 22.0
    }
  }
}

4.5.4 求和sum

年龄总和

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "aggs": {
    "my_sum": {
      "sum": {
        "field": "age"
      }
    }
  },
    
  "size": 0
}

4.5.5 分组查询

查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。

GET zhifou/doc/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      }
    }
  }
}

aggs的自定义别名age_group中,使用range来做分组,field是以age为分组,分组使用ranges来做,fromto是范围,我们根据需求做出三组。

对每个小组内的数据做平均年龄

GET zhifou/doc/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      },
      "aggs": {
        "my_avg": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  }
}

注意:聚合函数的使用,一定是先查出结果,然后对结果使用聚合函数做处理

posted @ 2025-03-06 16:05  布丁家的苏苏  Views(15)  Comments(0)    收藏  举报