ElasticSearch(八)【过滤查询】

发布于:2022-12-12 ⋅ 阅读:(722) ⋅ 点赞:(0)

八、过滤查询


上一篇文章ElasticSearch - 扩展词、停用词配置

过滤查询,其实准确来说,ES中的查询操作分为2种:查询(query) 过滤(filter)。查询即是之前提到的query查询,它 (查询)默认会计算每个返回文档的得分,然后根据得分排序。而过滤(filter)只会筛选出符合的文档,并不计算得分,而且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。 换句话说,过滤适合在大范围筛选数据,而查询则适合精确匹配数据。一般应用时, 应先使用过滤操作过滤数据,然后使用查询匹配数据

在这里插入图片描述

注意

  • 在执行 filter 和 query 时,先执行 filter 在执行 query
  • Elasticsearch 会自动缓存经常使用的过滤器,以加快性能

常见过滤类型

  • term:单个关键词
  • terms:多个关键词
  • range:范围
  • exists:存在
  • ids:多个id

term类型

GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "description": {
            "value": "blog"
          }
        }}
      ],
      "filter": [
        {"term": 
          {"description": "blog"}
        }
      ]
    }
  }
}

terms类型

GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {"terms": {
          "description": [
            "blog",
            "vinjcent"
          ]
        }
        }
      ]
    }
  }
}

range类型

GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {"range": {
          "price": {
            "gte": 0,
            "lte": 20
          }
        }}
      ]
    }
  }
}

exists类型,过滤存在指定字段,获取字段不为空的索引记录使用

GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "exists": {
            # 存在某个字段
            "field": "aaa"
          }
        }
      ]
    }
  }
}

ids类型,过滤含有指定字段的索引记录

GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "description": {
              "value": "blog"
            }
          }
        }
      ],
      "filter": [
        {
          "ids": {
            "values": [
              "1","2"
            ]
          }
        }
      ]
    }
  }
}

下一篇文章ElasticSearch - SpringBoot整合

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到