写点什么

Elasticsearch Query DSL 概述与查询、过滤上下文

  • 2022 年 4 月 17 日
  • 本文字数:1021 字

    阅读完需:约 3 分钟

从本节开始,先详细介绍 Elasticsearch Query DSL 语法,该部分是 SearchAPI 的核心基础之一。


Elasticsearch 提供了一个基于 JSON 的完整查询 DSL(领域特定语言)来定义查询。把查询 DSL 看作是查询的 AST(抽象语法树),由两种类型的子句组成:


  • Leaf query clauses(叶查询字句)


叶子查询子句指在特定的字段中寻找特定的值,例如匹配、范围查询或 term(完全匹配)。这些查询 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 可以单独使用。


  • Compound query clauses(复合查询字句)


复合查询字句包装其他叶子或复合字句,用于以逻辑方式组合多个查询(如 bool、dis_max)或改变他们的行为(如常量查询)。


[](()1、query and filter context(查询与过滤上下文)




查询子句的行为取决于它是在查询上下文中使用还是在过滤上下文中使用:


  • 查询上下文


在查询上下文中使用的查询子句,查询字句回答了“这个文档与这个查询子句(查询条件)匹配得有多好?”除了决定文档是否匹配之外,查询子句还计算一个分数,表示相对与其他文档该文档匹配的程度。每当一个查询子句传递给查询参数(query)时,查询上下文就会生效,比如搜索 API 中的查询参数。


  • 过滤上下文


在过滤上下文中,查询子句回答“这个文档是否匹配这个查询子句?”答案是简单的“是”或“否”——没有计算出分数。过滤上下文主要用于过滤结构化数据(相当与关系型数据库的过滤条件)。例如这个时间戳是否会在 2015 年到 2016 年之间?文章的状态是为“发布”吗?等等。


经常使用的过滤器(filter context)会被 Elasticsearch 自动缓存,以提高性能。每当一个查询子句被传递给过滤器参数(filter)时,过滤器上下文就会生效,例如 bool 查询中的 filter 或 must_not 参数、或 filter 查询中的常量查询(constant_score)或 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 filter 查询。


举例如下:


GET /_search


{


"query": { // @1


"bool": { // @2


"must": [


{ "match": { "title": "Search" }}, // @3

最后

Java 架构进阶面试及知识点文档笔记


这份文档共 498 页,其中包括 Java 集合,并发编程,JVM,Dubbo,Redis,Spring 全家桶,MySQL,Kafka 等面试解析及知识点整理



Java 分布式高级面试问题解析文档


其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis 缓存,分库分表,微服务架构,分布式高可用,读写分离等等!



互联网 Java 程序员面试必备问题解析及文档学习笔记



Java 架构进阶视频解析合集

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Elasticsearch Query DSL概述与查询、过滤上下文_Java_爱好编程进阶_InfoQ写作平台