介绍
Elasticsearch提供了基于JSON的完整查询DSL(Domain Specific Language,领域特定语言)来定义查询。可以把Query DSL看作查询的AST(Abstract Syntax Tree,抽象语法树),它由两种类型的子句组成:
Leaf query clauses叶查询子句
叶查询子句在特定的字段中查找特定的值,例如match、term或range查询。
Compound query clauses 复合查询子句
复合查询子句包装其他叶查询或复合查询,并用于以逻辑方式组合多个查询(例如bool或dis_max查询),或更改它们的行为(例如constant_score查询)。
Allow expensive queries 高成本查询
某些类型的查询通常执行缓慢,这是由于它们的实现方式,这可能会影响集群的稳定性。
这些查询可以分类如下:
- 需要做线性扫描来识别匹配的查询:
- script queries
- 成本较高的查询:
- fuzzy queries (except on wildcard fields)
- regexp queries (except on wildcard fields)
- prefix queries (except on wildcard fields or those without index_prefixes)
- wildcard queries (except on wildcard fields)
- range queries on text and keyword fields
- Joining queries
- 关于已弃用geo-shapes的查询
- 每个文档的成本可能很高的查询:
- script_score queries
- percolate queries