从本节开始,先详细介绍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中的查询参数。
- 过滤上下文
在过滤上下文中,查询子句回答“这个文档是否匹配这个查询子句?”答案是简单的