ElasticSearch初探之所有初次使用记录(三)复合查询及全文查询

本文介绍了ElasticSearch的bool查询,包括must、must_not、should子句的使用,重点讲解了must在过滤条件下的应用,should在短语匹配中的设置,以及term与match查询的区别。此外,还探讨了match_phrase、match_phrase_prefix的用法,以及在实际操作中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

must,must_not,should

关于bool query:

  • Bool查询对应Lucene中的BooleanQuery,它由一个或者多个子句组成,每个子句都有特定的类型。
occurrence 描述
must 返回的文档必须满足must子句的条件,并且参与计算分值
filter 【filter以前时单独的query DSL,现在归入bool query】;子句(查询)必须出现在匹配的文档中。然而,不同于must查询的是——它不参与分数计算。 Filter子句在过滤器上下文(filter context)中执行,这意味着score被忽略并且子句可缓存【所以filter可能更快】
should “权限”比must/filter低。如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回。minimum_should_match参数定义了至少满足几个子句。
must_not 返回的文档必须不满足must_not定义的条件

must

bank数据中,找出年龄必须为22,且在Waverly城市的文档

# must
POST /bank/account/_search?pretty
{
  "query": {
    "bool": {
      "must": [
        {
  "match": {
          "age": "22"
        }},
        {
  "match": {
          "city": "Waverly"
        }}
      ]
    }
  }
}

filter

对多个字段filter时,range报错:

[range] query doesn’t support multiple fields, found [balance] and [age]”
非bool query的查询也是同样,不允许多字段
也不允许多个filter存在
因为我想查找多个range,所以terms不适用
但是kibana中试了下,是可以的
这里写图片描述

# filter
GET /bank/_search?pretty
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

多range已经解决,见更正1

should

找出地址包含”mill”或者”lane”的文档

  • “minimum_should_match” : 2
    表示3个条件至少符合两个
  • 如果想知道到底是bool里面哪个条件匹配,可以使用named查询【给每个查询取个名字,使用”_name”参数】
    比如:”match”: { “address”:{ “query”:”mill”, “_name”:”first” } }
# should
GET /bank/_search?pretty
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address":{ "query":"mill", "_name":"first" } }},
        { "match": { "addre
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值