DSL高级查询

DSL高级查询

DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言(下简称 DSL)

为了解决某一类任务而专门设计的计算机语言。

POST _bulk
{"create":{"_index":"my_index","_id":1}}
{"id":1,"title":"华为笔记本电脑","category":"华为","images":"http://www.gulixueyuan.com/xm.jpg","price":5388}
{"create":{"_index":"my_index","_id":2}}
{"id":2,"title":"华为手机","category":"华为","images":"http://www.gulixueyuan.com/xm.jpg","price":5500}
{"create":{"_index":"my_index","_id":3}}
{"id":3,"title":"VIVO手机","category":"vivo","images":"http://www.gulixueyuan.com/xm.jpg","price":3600}
#查询所有

查询所有文档

match_all:

请求 /索引/_search{ "query": { "match_all": {}}}

POST /my_index/_search
{
  "query": {
   
  }
}

匹配查询

match : 匹配查询match支持分词的

POST /my_index/_search
{
  "query": {
    "match": {
      "title": "华为智能手机"
    }
  }
}

补充条件删除

#补充条件删除
POST /my_index/_delete_by_query
{
  "query": {
    "match": {
      "title": "vivo"
    }
  }
}

多字段匹配

multi_match 满足使用 match 在多个字段中进行查询的需求

#多字段匹配
POST /my_index/_search
{
  "query": {
    "multi_match": {
      "query": "华为手机",
      "fields": ["title","category"]
    }
  }
}

前缀匹配

prefix 根据前缀去查询

#前缀匹配
POST /my_index/_search
{
  "query": {
    "prefix": {
      "title": {
        "value": "vivo智能"
      }
    }
  }
}

关键字精确查询 和 多关键字精确查询

term:关键字不会进行分词。

#关键字精确查询
​
POST /my_index/_search
{
  "query": {
    "term": {
      "title": {
        "value": "华为智能手机"
      }
    }
  }
  
}
#多关键字
POST /my_index/_search
{
  "query": {
    "terms": {
      "title": [
        "华为",
        "华为手机"
      ]
    }
  }
  
}

范围查询

范围查询使用range。

  • gte: 大于等于

  • lte: 小于等于

  • gt: 大于

  • lt: 小于

POST /my_index/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 3000,
        "lte": 6000
      }
    }
  }
}
​
POST /my_index/_search
{
  "query": {
    "range": {
      "price": {
        "gt": 5000,
        "lt": 6000
      }
    }
  }
}
 指定返回字段

query同级增加_source进行过滤。

POST /my_index/_search
{
  "query": {
    "terms": {
      "title": [
        "华为手机",
        "华为"
      ]
    }
  },
   "_source": ["title","category"]
}

组合查询

bool 各条件之间有and,or或not的关系

  • must: 各个条件都必须满足,所有条件是and的关系

  • should: 各个条件有一个满足即可,即各条件是or的关系

  • must_not: 不满足所有条件,即各条件是not的关系

  • filter: 与must效果等同,但是它不计算得分,效率更高点。

# 组合查询
#must : 各个条件都必须满足,不然就是空
POST /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 3000,
              "lte": 6000
            }
          }
        }
      ]
    }
  }
  
}
​
#should: 各个条件有一个满足即可,即各条件是or的关系
​
POST /my_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 1000,
              "lte": 600
            }
          }
        }
      ]
    }
  }
  
}
​
#must_not: 不满足所有条件,即各条件是not的关系
​
POST /my_index/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 1000,
              "lte": 6000
            }
          }
        }
      ]
    }
  }
  
}
​
​
​
#filter: 与must效果等同,但是它不计算得分,效率更高点。
#_score的分值为0
​
POST /my_index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 3000,
              "lte": 6000
            }
          }
        }
      ]
    }
  }
  
}
​
#如果should和must同时存在,他们之间是and关系:
​
POST /my_index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 3000,
              "lte": 6000
            }
          }
        }
      ],
      "must": [
        {
          "match": {
            "title": "华为"
          }
        },
        {
          "range": {
            "price": {
              "gte": 3000,
              "lte": 6000
            }
          }
        }
      ]
    }
  }
}

聚合查询

聚合允许使用者对es文档进行统计分析,类似与关系型数据库中的group by,当然还有很多其他的聚合,例如取最大值、平均值等等。

#聚合查询
#metric:对一个数据分组执行的统计,好比计算最大值,最小值,平均值等
#bucket数据分组,一些数据按照某个字段进行bucket划分,这个字段值相同的数
#一个bucket中

#max:最大值
POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 20,
  "aggs": {
    "max_price": {
      "max": {
        "field": "price"
      }
    }
  }
}
#min:最小值

POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0, 
  "aggs": {
    "min_price": {
      "min": {
        "field": "price"
      }
    }
  }
}
#avg:求平均数
POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 1,
  "aggs": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}
#sum:总和

POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0, 
  "aggs": {
    "sum_price": {
      "sum": {
        "field": "price"
      }
    }
  }
}

#stats:统计数据

POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0, 
  "aggs": {
    "stats_price": {
      "stats": {
        "field": "price"
      }
    }
  }
}
#terms:高亮查询   只要有被提供的字段值(未被分析)被文档匹配,该文档将
#被此terms询匹配。

POST /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0, 
  "aggs": {
    "groupby_category": {
      "terms": {
        "field": "category",
        "size": 10
      }
    }
  }
}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值