Elasticsearch 基础API(二)

基础查询

  1. 简单查询
    # 根据id查询
    $ curl 192.168.123.123:9200/rotao_test_index/goods/TSnZUGQB-rtSN27h7F19?pretty
    
  2. 条件查询
    # 1.查询所有数据
    $ curl -H 'Content-Type: application/json' -XPOST 192.168.123.123:9200/rotao_test_index/goods/_search?pretty -d'{
       "query": {
           "match_all": {}
       },
       "from": 1,
       "size": 1
    }'
    
    # 返回数据说明
    {
       "took": 16,                    # 查询花费的时间(毫秒)
       "timed_out": false,            # 是否超时
       "_shards": {                   # 分片相关信息
           "total": 5,                # 总共查询的分片数
           "successful": 5,           # 查询成功的分片数
           "skipped": 0,              # 跳过的分片数
           "failed": 0                # 查询失败的分片数
       },
       "hits": {                       # hits响应结果
           "total": 7,                 # 本次查询的总记录数
           "max_score": 1,             # 最高匹配评分
           "hits": [                   # 数据列表
               {
                   "_index": "rotao_test_index",             # 所属索引
                   "_type": "goods",                         # 所属类型
                   "_id": "TSnZUGQB-rtSN27h7F19",            # 记录的id
                   "_score": 1,                              # 当前记录的评分
                   "_source": {                              # es保存的源数据
                       "id": 1,
                       "prduct_name": "富勒机械键盘",
                       "title": "买一送一",
                       "created_date": "2018-05-01 12:30:32"
                   }
               }
           ]
       }
    }
    
    # 2.关键词查询
    # 此处查询为查询product_name包含'xiaomi'的记录
    $ curl -H 'Content-Type: application/json' -XPOST 192.168.123.123:9200/rotao_test_index/goods/_search?pretty -d'{
       "query": {
           "match": {
               "product_name": "xiaomi"
           }
       },
       "from": 1, # 从第一条数据开始读取
       "size": 1  # 获取1条数据
    }'
    
    # 3.排序
    # 注意:涉及排序的查询,返回的数据在"max_score"、"_score"无值
    $ curl -H 'Content-Type: application/json' -XPOST 192.168.123.123:9200/rotao_test_index/goods/_search?pretty -d'{
       "query": {
           "match": {
               "product_name": "xiaomi"
           }
       },
       "sort": [
           {
               "created_date": {        # 根据created_date字段降序
                   "order": "desc"
               }
           },
           {
               "id": {                   # 根据id升序
                   "order": "asc"       
               }
           }
       ]
    }'
    
  3. 聚合查询

    > 基本格式

    "aggregations" : {                  // 表示聚合操作,可以使用aggs替代
       "<aggregation_name>" : {        // 聚合名,可以是任意的字符串。用做响应的key,便于快速取得正确的响应数据。
           "<aggregation_type>" : {    // 聚合类别,就是各种类型的聚合,如min等
               <aggregation_body>      // 聚合体,不同的聚合有不同的body
           }
           [,"aggregations" : { [<sub_aggregation>]+ } ]? // 嵌套的子聚合,可以有0或多个
       }
       [,"<aggregation_name_2>" : { ... } ]* // 另外的聚合,可以有0或多个
    }
    

    > 说明

    可以配合query查询得到需要的数据集,然后再做聚合查询

    > 实例

    # 1.数据聚合
    # 指定聚合查询的字段(field)为title字段
    $ curl -H 'Content-Type: application/json' -XPOST 192.168.123.123:9200/rotao_test_index/goods/_search?pretty -d'{
       "aggs": {
           "group_by_type_count": {
               "terms": {
                   "field": "type"
               }
           },
           "group_by_categroy_count": {
               "terms": {
                   "field": "type"
               }
           }
       }
    }'
    
    # 返回数据说明
      {
       "took": 16,                    
       "timed_out": false,           
       "_shards": {                   
           ...
       },
       "hits": {                      
           "total": 7,                
           "max_score": 1,            
           "hits": [                 
               ...
           ]
       },
       "aggregations": {               # 聚合信息
           "group_by_title_count": {
               "doc_count_error_upper_bound": 0,
               "sum_other_doc_count": 0,
               "buckets": [
                   {
                       "key": 1,
                       "doc_count": 6
                   },
                   {
                       "key": 2,
                       "doc_count": 1
                   }
               ]
           },
        "group_by_title_count": {
               "doc_count_error_upper_bound": 0,
               "sum_other_doc_count": 0,
               "buckets": [
                   {
                       "key": 8,
                       "doc_count": 4
                   },
                   {
                       "key": 5,
                       "doc_count": 3
                   }
               ]
           }
       }
    }
    
    # 2.数据统计
    # stats->计算各类值 min->最小值 "stats"函数可以替换成其他函数
    $ curl -H 'Content-Type: application/json' -XPOST 192.168.123.123:9200/rotao_test_index/goods/_search?pretty -d'{
       "aggs": {
           "grades_word_count": {
               "stats": {
                   "field": "type"
               }
           }
       }
    }'
    
    # 返回数据说明
    {
       "took": 16,                    
       "timed_out": false,           
       "_shards": {                  
           ...
       },
       "hits": {                     
           "total": 7,                
           "max_score": 1,             
           "hits": [                  
               ...
           ]
       },
    "aggregations": {
           "grades_word_count": {
               "count": 7,
               "min": 1,
               "max": 2,
               "avg": 1.1428571428571428,
               "sum": 8
           }
       }
    }
    

发表评论

电子邮件地址不会被公开。 必填项已用*标注