Query DSL 简介
- Elasticsearch提供了基于JSON的、完整的
Query DSL
(Domain Specific Language,领域特定语言)。 把Query DSL想象成
AST
(Abstract Syntax Tree,抽象语法树),这样就有叶子子句
和复合(容器)子句
。- 叶子子句:叶子子句可以单独使用,一般用来查找指定字段的指定值,例如
match
、term
、range
。 - 复合子句:组合叶子子句或其他复合子句,一般用来逻辑组合多查询(例如
bool
)或改变行为(例如constant_score
)。
- 叶子子句:叶子子句可以单独使用,一般用来查找指定字段的指定值,例如
Query Context | Filter Context
Query Context
- 除了匹配文档,还会计算匹配程度(相关性算分),分数越高匹配程度越高。
Filter Context
- Filter Context只进行过滤(是|否),不计算匹配程度(相关性算分)。
- ELasticsearch会自动缓存常用的过滤,以提高性能。
- 总之,把需要计算匹配程度的条件放到Query Context下,其余尽量放到Filter Context下。放到Query Context下算分,放到Filter Context缓存,提高性能。