query DSL

query DSL基本语法

使用query定义查询条件
可以添加其他的查询条件以过滤 如sort 排序 from + size分页
查询match_all表示查询索引记录 sort表示排序 balance表示排序字段 根据balance进行升序排序

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "asc"
      }
    }
  ]
}

match 匹配搜索

按输入的字段的值进行匹配 然后按相关性就像排序
根据address为mill的值进行匹配 只要保护mill的值都进行查询匹配

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

score表示相关性
image

match_phrase 短语匹配

百分百匹配 将整个字段看成一个词进行匹配查询 直接进行查询 将匹配结果返回 符合整条短语的进行返回

GET bank/_search
{
  "query": {
    "match_phrase": {
      "firstname": "Forbes"
    }
  }
}

keyword 精确匹配

只有100%完美一致的值才能进行匹配

GET bank/_search
{
  "query": {
    "match": {
      "address.keyword": "132 Gunnison Court"
    }
  }
}

multi_match 多字段匹配

只要匹配字段中其中一个字段包含 query 中的值 则进行匹配返回
fields表示匹配字段列表

GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "M",
      "fields": ["gender", "employer"]
    }
  }
}

bool 查询

可以有四个参数
must为必须匹配 must_not为必须不匹配 should表示可以匹配也可以不匹配 如果匹配到了 相关性会提高 filter 若只添加fileter字段 将不进行相关性统计 若与must must_not should进行使用则进行结果再过滤
image
如果过滤后使用filter 表示将结果进行再次过滤 查询age > 10 且 age < 38 的结果 且address中不包含Street的结果
然后 firstname 可以是Amber 的结果 再进行filter过滤 account_number > 5 且小于10

GET bank/_search 
{
  "query": {
    "bool": {
      "must": [
        {"range": {
          "age": {
            "gte": 10,
            "lte": 38
          }
        }}
      ],
      "must_not": [
        {"match": {
          "address": "Street"
        }}
      ],
      "should": [
        {"match": {
          "firstname": "Amber"
        }}
      ],
      "filter": [
        {"range": {
          "account_number": {
            "gte": 5,
            "lte": 10
          }
        }}
      ]
    }
  }
}

执行结果
image
如果直接使用filter 执行结果不会对相关性进行统计

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

执行结果
image

term 精确匹配

字符串使用match匹配
数字 浮点等使用term匹配

GET bank/_search
{
  "query": {
    "term": {
      "age": 20
    }
  }
}
posted @   RainbowMagic  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示