【ElasticSearch】filter与query对比

本文通过实例展示了在Elasticsearch中如何使用filter和query进行搜索过滤,强调了两者在相关度计算、排序及性能上的区别。filter适用于不关注相关度排序的数据筛选,性能更优,而query则用于获取最相关结果并进行排序。在性能方面,filter由于无需计算相关度分数且能缓存,故效率更高。
摘要由CSDN通过智能技术生成

对比filter与query的使用:
先插入两条数据:

PUT /company/employee/2
{
  "address": {
    "country": "china",
    "province": "jiangsu",
    "city": "nanjing"
  },
  "name": "tom",
  "age": 30,
  "join_date": "2016-01-01"
}

PUT /company/employee/3
{
  "address": {
    "country": "china",
    "province": "shanxi",
    "city": "xian"
  },
  "name": "marry",
  "age": 35,
  "join_date": "2015-01-01"
}

搜索请求:年龄必须大于等于30,同时join_date必须是2016-01-01

GET /company/employee/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "join_date": "2016-01-01"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 30
          }
        }
      }
    }
  }
}

对比:
filter:仅按照搜索条件过滤需要的数据,不计算任何相关度分数,对相关度没有任何影响
query:计算每个document相对于搜索条件的相关度,并按照相关度进行排序

如果需要将最匹配搜索条件的数据返回,用query
如果只需要筛选一部分数据,不关注排序,用filter

性能:
filter:不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常用filter的数据
query:计算相关度分数,按照分数进行排序,而且无法cache结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值