7.过滤查询

简介: 7.过滤查询

过滤查询

过滤查询<filter query>,其实准确来说,ES中的查询操作分为2种:查询(query)和过滤(filter)。

查询即是之前提到的query查询,它(查询)默认会计算每个返回文档的得分,然后根据得分排序。

而过滤(filter)只会筛选出符合的文档,并不计算得分,而且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。

换句话说过滤适合在大范围筛选数据,而查询则适合精确匹配数据。 一般应用时,应先使用过滤操作过滤数据,然后使用查询匹配数据。 ![[Pasted image 20231103161104.png]] 通过过滤查询,排除不想要的数据,大大减少了查询的数据量。

使用

http

复制代码

GET /products/_search
{
  "query":{
    "bool": {
      "filter": [
        {...},   //查询条件
        {...}
      ]
    }
  }
}
  • 注意:
  • 在执行filter和query时,先执行filter在执行query
  • Elasticsearch会自动缓存经常使用的过滤器,以加快性能。

官网文档 Filter search results | Elasticsearch Guide [8.10] | Elastic

类型

常见过滤类型有: term . terms . ranage、exists、ids等filter。官网文档 Filter search results | Elasticsearch Guide [8.10] | Elastic

term、terms过滤

http

复制代码

GET /products/_search
{
  "query":{
    "bool": {
      "filter": [
        {"term": {"description": "很"}},
        {"term": {"description": "好"}},
        {"terms": {
          "description": [
            "很",
            "好"
          ]
        }}
      ]
    }
  }
}

range filter

http

复制代码

GET /products/_search
{
  "query":{
    "bool": {
      "filter": [
        {"range": {
          "price": {
            "gte": 1,
            "lte": 100
          }
        }}
      ]
    }
  }
}

exist filter

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

http

复制代码

GET /products/_search
{
  "query":{
    "bool": {
      "filter": [
        {"exists": {
          "field": "id"
        }}
      ]
    }
    
  }
}

ids filter

http

复制代码

GET /products/_search
{
  "query":{
    "bool": {
      "filter": [
        {"ids": {
          "values": [
            "1"
          ]
        }}
      ]
    }
  }
}


相关文章
|
6月前
|
前端开发 搜索推荐 NoSQL
提升用户体验:电商API如何优化购物车与支付流程
本文探讨电商购物车与支付流程优化,通过API技术提升用户体验。一是购物车原子化操作,如ETag版本控制解决冲突、局部更新减少传输;二是支付流程聚合与降级,包括JWT单次验证、动态支付选项及备用渠道切换;三是实时库存保护,利用分布式锁防止超卖。案例显示,优化后购物车冲突减少92%,支付耗时降至2.1秒,移动端转化率提升18%。API作为体验引擎,未来将与前端深度协同,推动更优购物闭环。
180 1
|
存储 Go
Golang底层原理剖析之map
Golang底层原理剖析之map
431 1
|
10月前
|
Web App开发 人工智能 安全
指南:Google Gemini 2.0 Pro国内版 (Gemini 2.0国内使用指南)
据称,谷歌 AI 推出的 Gemini Pro 国内版,是一款性能卓越的大型语言模型,其能力和表现均超越了广受欢迎的 ChatGPT。作为 Fostmar 的重大升级,它将为用户带来前所未有的 AI 交互体验
2442 0
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
1200 6
|
存储 NoSQL 开发工具
开发者如何使用表格存储 Tablestore
【10月更文挑战第11天】开发者如何使用表格存储 Tablestore
649 0
什么是多态?面向对象中对多态的理解
本文介绍了面向对象编程中的多态概念,包括其定义、优点以及编译时多态和运行时多态的具体实现方式。通过实例展示了函数重载、运算符重载、虚函数、接口和抽象类的应用,帮助读者深入理解多态的灵活性和可扩展性。
925 7
|
SQL 关系型数据库 MySQL
MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化
673 4
|
消息中间件 存储
消息队列的挑战与解决方案:丢失、重复与积压问题
消息队列(MQ)在分布式系统中扮演着重要的角色,用于解耦服务、异步处理任务和提高系统吞吐量。然而,在使用消息队列时,我们可能会遇到消息丢失、重复和积压等问题。本文将探讨这些问题的成因以及相应的解决方案。
469 1
|
机器学习/深度学习 计算机视觉
卷积神经网络(CNN)的不同层
【8月更文挑战第23天】
498 3
|
Java 编译器 Scala
IDEA上的Scala环境搭建
本文指导如何搭建Scala开发环境。首先,安装Scala编译器`scala-2.12.10.msi`,通过DOS窗口验证安装成功。然后,在IDEA中,安装Scala插件,创建Maven工程,删除默认包,新建Scala源码包,并在其中创建Scala Object类。接着,配置项目结构,添加Scala SDK,确保Maven、Language Level和Compiler的bytecode版本设置正确。最后,编写并测试基本的Scala代码。
865 2
IDEA上的Scala环境搭建