search

there are two ways for searching

  • REST request body
  • REST request URI

REST request body

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ],
  "size": 1, // define the doc account
  "from": 10, // start from 11th element
  // Note that if from is not specified, it defaults to 0. (0-based)
}
// return the specified field of document
GET /bank/_search
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}
// This example returns all accounts containing 
// the term "mill" or "lane" in the address: 
// match means ambiguious search

GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}

// query - bool - must/should/must_not
// filter and range
GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

REST request URI

GET /bank/_search?q=*&sort=account_number:asc&pretty

aggregation

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

it will return

{
   "took": 35,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1000,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "group_by_state": {
         "doc_count_error_upper_bound": 20,
         "sum_other_doc_count": 770,
         "buckets": [
            {
               "key": "ID",
               "doc_count": 27,
               "average_balance": {
                  "value": 24368.777777777777
               }
            },
            {
               "key": "TX",
               "doc_count": 27,
               "average_balance": {
                  "value": 27462.925925925927
               }
            },
            {
               "key": "AL",
               "doc_count": 25,
               "average_balance": {
                  "value": 25739.56
               }
            },
            {
               "key": "MD",
               "doc_count": 25,
               "average_balance": {
                  "value": 24963.52
               }
            },
            {
               "key": "TN",
               "doc_count": 23,
               "average_balance": {
                  "value": 29796.782608695652
               }
            },
            {
               "key": "MA",
               "doc_count": 21,
               "average_balance": {
                  "value": 29726.47619047619
               }
            },
            {
               "key": "NC",
               "doc_count": 21,
               "average_balance": {
                  "value": 26785.428571428572
               }
            },
            {
               "key": "ND",
               "doc_count": 21,
               "average_balance": {
                  "value": 26303.333333333332
               }
            },
            {
               "key": "ME",
               "doc_count": 20,
               "average_balance": {
                  "value": 19575.05
               }
            },
            {
               "key": "MO",
               "doc_count": 20,
               "average_balance": {
                  "value": 24151.8
               }
            }
         ]
      }
   }
}

The big boss aggregation

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "average_balance": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}

And it will return

{
   "took": 11,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1000,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "group_by_age": {
         "buckets": [
            {
               "key": "20.0-30.0",
               "from": 20,
               "to": 30,
               "doc_count": 451,
               "group_by_gender": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "M",
                        "doc_count": 232,
                        "average_balance": {
                           "value": 27374.05172413793
                        }
                     },
                     {
                        "key": "F",
                        "doc_count": 219,
                        "average_balance": {
                           "value": 25341.260273972603
                        }
                     }
                  ]
               }
            },
            {
               "key": "30.0-40.0",
               "from": 30,
               "to": 40,
               "doc_count": 504,
               "group_by_gender": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "F",
                        "doc_count": 253,
                        "average_balance": {
                           "value": 25670.869565217392
                        }
                     },
                     {
                        "key": "M",
                        "doc_count": 251,
                        "average_balance": {
                           "value": 24288.239043824702
                        }
                     }
                  ]
               }
            },
            {
               "key": "40.0-50.0",
               "from": 40,
               "to": 50,
               "doc_count": 45,
               "group_by_gender": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                     {
                        "key": "M",
                        "doc_count": 24,
                        "average_balance": {
                           "value": 26474.958333333332
                        }
                     },
                     {
                        "key": "F",
                        "doc_count": 21,
                        "average_balance": {
                           "value": 27992.571428571428
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

question: 20-30, 30-40??

which contain 30?