zoukankan      html  css  js  c++  java
  • Elasticsearch之-查询

    1 match和term查询

    # 并且和或者的条件
    #并且
    GET t3/doc/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "title": "beautiful"
              }
            },
            {
              "match": {
                "desc": "beautiful"
              }
            }
          ]
        }
      }
    }
    
    #或者
    GET t3/doc/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "title": "beautiful"
              }
            },
            {
              "match": {
                "desc": "beautiful"
              }
            }
          ]
        }
      }
    }
    
    
    
    # match,term和terms的区别
        -match查的短语会分词
        GET w10/_doc/_search
            {
              "query": {
                "match": {
                  "t1": "Beautiful girl!"
                }
              }
            }
        -term查的不会分词
        GET w10/_doc/_search
                {
              "query": {
                "term": {
                  "t1": "girl"
                }
              }
            }
        -terms由于部分词,想查多个,terms
            GET w10/_doc/_search
            {
              "query": {
                "terms": {
                  "t1": ["beautiful", "sexy"]
                }
              }
            }
            
            
            
    # pymysql   原生操作,查出字典
    # orm       orm直接转成对象

    2 排序查询

    ##### 不是所有字段都支持排序,只有数字类型,字符串不支持
    
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      }
    }
    
    #降序
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "sort": [
        {
          "age": {
            "order": "desc"
          }
        }
      ]
    }
    
    ## 升序
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "sort": [
        {
          "age": {
            "order": "asc"
          }
        }
      ]
    }
    
    
    GET lqz/_doc/_search
    {
      "query": {
        "match_all": {
        }
      },
      "sort": [
        {
          "age": {
            "order": "asc"
          }
        }
      ]
    }

    3 分页查询

    #从第二条开始,取一条
    GET lqz/_doc/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "age": {
            "order": "desc"
          }
        }
      ]
    }
    
    GET lqz/_doc/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "age": {
            "order": "desc"
          }
        }
      ], 
      "from": 2,
      "size": 2
    }
    
    
    
    
    ###注意:对于`elasticsearch`来说,所有的条件都是可插拔的,彼此之间用`,`分割
    GET lqz/_doc/_search
    {
      "query": {
        "match_all": {}
      }, 
      "from": 2,
      "size": 2
    }

    4 布尔查询

    - must(and- should(or- must_not(not##布尔查询之must and条件
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "from": "gu"
              }
            },
            {
              "match": {
                "name": "顾老二"
              }
            }
          ]
        }
      }
    }
    
    
    ##布尔查询之should or条件
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "from": "gu"
              }
            },
            {
              "match": {
                "name": "龙套偏房"
              }
            }
          ]
        }
      }
    }
    
    
    
    
    
    ### must_not条件   都不是
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "must_not": [
            {
              "match": {
                "from": "gu"
              }
            },
            {
              "match": {
                "tags": "可爱"
              }
            },
            {
              "match": {
                "age": 18
              }
            }
          ]
        }
      }
    }
    
    
    
    
    ###filter,大于小于的条件   gt lt  gte  lte
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "from": "gu"
              }
            }
          ],
          "filter": {
            "range": {
              "age": {
                "lt": 30
              }
            }
          }
        }
      }
    }
    
    
    ### 范围查询
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "from": "gu"
              }
            }
          ],
          "filter": {
            "range": {
              "age": {
                "gte": 25,
                "lte": 30
              }
            }
          }
        }
      }
    }
    
    
    ### filter需要在bool内部,并且如果是and条件,需要用must,如果使用了should,会认为是should和filter是或者的关系
    • must:与关系,相当于关系型数据库中的and

    • should:或关系,相当于关系型数据库中的or

    • must_not:非关系,相当于关系型数据库中的not

    • filter:过滤条件。

    • range:条件筛选范围。

    • gt:大于,相当于关系型数据库中的>

    • gte:大于等于,相当于关系型数据库中的>=

    • lt:小于,相当于关系型数据库中的<

    • lte:小于等于,相当于关系型数据库中的<=

    5 查询结果过滤

    ###基本使用
    GET lqz/_doc/_search
    {
      "query": {
        "match_all": {
          }
      },
      "_source":["name","age"]
    }
    
    
    ####_source和query是平级的
    
    GET lqz/_doc/_search
    {
      "query": {
        "bool": {
          "must":{
            "match":{"from":"gu"}
          },
          
          "filter": {
            "range": {
              "age": {
                "lte": 25
              }
            }
          }
        }
      },
      "_source":["name","age"]
    }

    6 高亮查询

    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "highlight": {
        "pre_tags": "<b class='key' style='color:red'>",
        "post_tags": "</b>",
        "fields": {
          "from": {}
        }
      }
    }

    7 聚合函数

    # sum ,avg, max ,min
    
    # select max(age) as my_avg from 表 where from=gu;
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "aggs": {
        "my_avg": {
          "avg": {
            "field": "age"
          }
        }
      },
      "_source": ["name", "age"]
    }
    
    #最大年龄
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "aggs": {
        "my_max": {
          "max": {
            "field": "age"
          }
        }
      },
      "_source": ["name", "age"]
    }
    
    #最小年龄
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "aggs": {
        "my_min": {
          "min": {
            "field": "age"
          }
        }
      },
      "_source": ["name", "age"]
    }
    
    # 总年龄
    #最小年龄
    GET lqz/_doc/_search
    {
      "query": {
        "match": {
          "from": "gu"
        }
      },
      "aggs": {
        "my_sum": {
          "sum": {
            "field": "age"
          }
        }
      },
      "_source": ["name", "age"]
    }
    
    
    
    #分组
    
    
    # 现在我想要查询所有人的年龄段,并且按照`15~20,20~25,25~30`分组,并且算出每组的平均年龄。
    GET lqz/_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
              }
            ]
          }
        }
      }
    }
  • 相关阅读:
    基础总结篇之一:Activity生命周期
    浅析Android中的消息机制
    详解Android中AsyncTask的使用
    URLConnection的连接、超时、关闭用法总结
    使用Open Flash Chart(OFC)制作图表(Struts2处理)
    用dTree组件生成无限级导航树
    jQuery插件Jeditable的使用(Struts2处理)
    Python Day 56 Django框架学习、学生管理系统迭代二、前后端交互数据传输方式、前台两种跳转方式、form表单详解
    Python Day 55 Django框架、利用学生管理系统来学习Django框架 (版本一)、数据库封装成类、单表操作新url方式、模态对话框
    Python Day 54 Django框架、web请求流程、状态码、自定义web框架
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14886894.html
Copyright © 2011-2022 走看看