zoukankan      html  css  js  c++  java
  • ElasticSearch的初步检索和进阶检索

    ES支持两种基本方式检索:

    一个是通过使用 REST request URI来发送搜索参数(uri + 检索参数)

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


    另一个是通过 REST request body 来发送他们 (uri + 请求体)

    GET bank/_search
    {
        "query":{
            "match_all":{}
         },
         "sort":[
            {
                 "balance":{
                     "order":"desc"
                 }
            } 
         ],
         "from":0,
         "size":5,
         "_source":["balance","firstname"]
    }


    1、match_all :查询所有

    GET bank/_search
    {
        "query":{
            "match_all"{}
         },
         "sort":[
            {
                 "balance":{
                     "order":"desc"
                 }
            } 
         ],
         "from":0,
         "size":5,
         "_source":["balance","firstname"]
    }


    2、match查询

    全文检索会按照评分进行排序,会对检索条件进行分词匹配

    GET bank/_search
    {
      "query": {
        "match": {
          "address": "kings"
        }
      }
    }


    3、match_phrase 【短语匹配】

    将需要匹配的值,当成一个整体单词(不分词)进行检索

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


    4、multi_match 【多字段匹配】

    也是分词查询

    // 查询 adress或者city中包含 mill的数据
    GET bank/_search
    {
      "query": {
        "multi_match": {
          "query": "mill",
          "fields": ["address","city"]
        }
      }
    }


    5、filter

    只用于对数据进行过滤,不会计算相关性得分

    GET bank/_search
    {
      "query": {
        "bool": {
          "filter": {
            "range": {
              "age": {
                "gte": 10,
                "lte": 20
              }
            }
          }
        }
      }
    }

    clipboard


    6、term 查询

    和match一样。匹配某个属性的值。全文检索用match,其他非text字段匹配用term

    GET /bank/_search
    {
      "query": {
        "term": {
          "balance": {
            "value": "32838"
          }
        }
      }
    }


    7、aggregation (执行聚合)

    聚合提供了从数据中分组和提取数据的能力。最简单的聚合大致等于SQL的聚合函数。

    在ElasticSearch中,你有执行搜索返回hit,并且同时返回聚合结果,把一个响应中所有hits分隔开的

    能力,这是非常强大且有效的。您可以执行查询和多个聚合并且在一次使用中得到各自的返回结果,使用一次简介和简化的api来避免网络往返


    语法:

    clipboard

    需求:

    1)搜索address中包含mail的所有人的年龄和平均年龄,但不显示这些人的详情

    GET bank/_search
    {
      "query": {
        "match": {
          "address": "mill"
        }
      },
      "aggs": {
        "ageagg": {
          "terms": {
            "field": "age",
            "size": 10
          }
        },
        "ageavg":{
          "avg": {
            "field": "age"
          }
        },
        "balanceavg":{
          "avg": {
            "field": "balance"
          }
        }
      }
    }


    2)按照年龄聚合,并求这些年龄段的人的平均薪资

    (聚合里面套聚合)

    GET bank/_search
    {
      "query": {
        "match_all": {}
      },
      "aggs": {
        "ageagg": {
          "terms": {
            "field": "age",
            "size": 10
          },
          "aggs": {
            "ageBalanceAvg": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }


    3)查出所有的年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资,以及这个年龄段总体的平均薪资

    GET bank/_search
    {
      "query": {
        "match_all": {}
      },
      "aggs": {
        "agegg": {  //聚合年龄
          "terms": { 
            "field": "age",
            "size": 100
          },
          "aggs": {
             "genderagg":{  //在年龄的聚合结果上聚合性别
                "terms": {
                  "field": "gender.keyword",
                  "size": 2
                },
                "aggs": {
                  "balanceagg": {  //xx岁 M性别的平均薪资
                    "avg": {
                      "field": "balance"
                    }
                  }
                }
            },
              "agebalanceaavg":{  //xx岁的平均薪资
                "avg": {
                  "field": "balance"
                }
              }
          }
        }
      }
    }
  • 相关阅读:
    python操作Excel表格
    Spring的AntPathMatcher(路径匹配)
    【纪中受难记】——Day17:本来能AK
    PAT (Basic Level) Practice (中文)1009 说反话 (20 分)
    PAT (Basic Level) Practice (中文)1008 数组元素循环右移问题 (20 分)
    PAT (Basic Level) Practice (中文)C++ & python 语言实现 —— 题解目录
    PAT (Basic Level) Practice (中文)C++ & python 语言实现 —— 题解目录
    PAT (Basic Level) Practice (中文)1007 素数对猜想 (20 分)
    PAT (Basic Level) Practice (中文)1007 素数对猜想 (20 分)
    PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
  • 原文地址:https://www.cnblogs.com/houchen/p/14157644.html
Copyright © 2011-2022 走看看