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"
                }
              }
          }
        }
      }
    }
  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/houchen/p/14157644.html
Copyright © 2011-2022 走看看