当前位置: 首页 > article >正文

ES Filter Query 区别

在 Elasticsearch(ES) 中,Filter 和 Query 是两种常用的数据检索方式,它们的主要区别在于 是否计算相关性分数(Score) 以及 是否使用缓存。以下是它们的详细区别和应用场景:


1. 核心区别

特性Filter(过滤器)Query(查询)
相关性分数不计算分数,只判断文档是否匹配。计算分数,用于衡量文档与查询的相关性。
性能性能更高,适合精确匹配。性能较低,适合全文检索。
缓存结果会被缓存,重复查询时更快。结果不会被缓存。
使用场景精确匹配(如范围查询、Term 查询)。全文检索(如 Match 查询)。
排序不参与排序。参与排序(基于分数)。

2. 详细说明

(1)Filter(过滤器)

  • 特点

    • 只判断文档是否匹配,不计算相关性分数。

    • 结果会被缓存,适合重复查询的场景。

    • 性能更高,因为不需要计算分数。

  • 使用场景

    • 精确匹配(如 Term 查询、Range 查询)。

    • 布尔条件判断(如 mustshouldmust_not)。

    • 过滤不需要排序的数据。

  • 示例

    json

    复制

    {
      "query": {
        "bool": {
          "filter": [
            { "term": { "status": "active" } },
            { "range": { "age": { "gte": 18, "lte": 30 } } }
          ]
        }
      }
    }

(2)Query(查询)

  • 特点

    • 计算文档与查询的相关性分数(Score)。

    • 结果不会被缓存。

    • 适合全文检索和模糊匹配。

  • 使用场景

    • 全文检索(如 Match 查询)。

    • 需要排序的场景(基于分数)。

    • 模糊匹配(如 Fuzzy 查询)。

  • 示例

    json

    复制

    {
      "query": {
        "match": {
          "title": "elasticsearch"
        }
      }
    }

3. Filter 和 Query 的结合使用

在实际应用中,Filter 和 Query 通常会结合使用,以兼顾性能和相关性。例如:

  • 使用 Filter 过滤掉不符合条件的文档。

  • 使用 Query 对剩余文档计算相关性分数。

示例:

json

复制

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "elasticsearch" } }  // Query
      ],
      "filter": [
        { "term": { "status": "active" } },       // Filter
        { "range": { "age": { "gte": 18 } } }     // Filter
      ]
    }
  }
}
  • must:用于 Query,计算相关性分数。

  • filter:用于 Filter,不计算分数,但会缓存结果。


4. 性能对比

  • Filter

    • 性能更高,适合精确匹配。

    • 结果缓存可以显著提升重复查询的性能。

  • Query

    • 性能较低,因为需要计算相关性分数。

    • 适合全文检索和排序场景。


5. 总结

  • Filter

    • 适合精确匹配和过滤场景。

    • 不计算分数,性能更高,结果会被缓存。

  • Query

    • 适合全文检索和排序场景。

    • 计算分数,性能较低,结果不会被缓存。

  • 结合使用

    • 在实际应用中,通常将 Filter 和 Query 结合使用,以兼顾性能和相关性。

通过合理使用 Filter 和 Query,可以显著提升 Elasticsearch 的查询性能和准确性。


http://www.kler.cn/a/582241.html

相关文章:

  • QT系列教程(20) Qt 项目视图便捷类
  • 界面控件Kendo UI for Vue 2024 Q4亮点 - 增强图表的数据模板、导航功能
  • 表、索引统计信息锁定和解锁
  • Burpsuite使用笔记
  • Windows控制台函数:控制台读取输入函数ReadConsoleA()
  • PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别
  • 数据可视化新高度:用seaborn.heatmap为数据加热
  • Spring Security 新版本配置
  • 23.Harmonyos Next仿uv-ui 组件NumberBox 步进器组件基础用法
  • Vue3 + Spring Boot集成JWT认证
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.2.2自动扩缩容策略(基于HPA)
  • 【数据结构】1数据结构基本概念 【作业1数据结构综述】
  • 力扣hot100_普通数组
  • 【odoo17】odoo前端视图的结构分析及新增视图类型的实现
  • C++竞赛级输入输出优化实战
  • 通过Golang的container/list实现LRU缓存算法
  • 大数据任务调度:DolphinScheduler、Airflow 实战(调度策略、任务依赖)
  • Python基于深度学习的电影评论情感分析可视化系统(全新升级版)【附源码、参考文档】
  • 【每日学点HarmonyOS Next知识】拖拽调整列表顺序、tab回弹、自定义弹窗this、状态变量修饰枚举
  • 工作中,当遇到要把http请求变成https时 怎么处理