Query DSL
Elasticsearch基于JSON提供了一个完整的查询DSL(领域特定语言)来定义查询。将查询DSL视为查询的AST(抽象语法树),由两种类型的子句组成:
叶查询子句
叶查询子句在特定字段中查找特定值,例如match、term或range查询。这些查询可以自己使用。
复合查询子句
复合查询子句包装其他叶查询或复合查询,并用于将多个查询以逻辑方式(如bool或dis_max查询),或更改它们的行为(如constant_score查询)。
查询子句的行为不同,具体取决于它们是否用于query context or filter context。
允许代价高的查询
某些类型的查询通常由于它们实现的方式而执行缓慢,这可能会影响集群的稳定性。这些查询可以分类如下:
-
需要执行线性扫描以识别匹配的查询:script queries
-
具有高前期成本的查询:
- 模糊查询(通配符字段除外)
- Regexp查询(通配符字段除外)
- 前缀查询(通配符字段除外)
- 通配符查询(通配符字段除外)
- 文本和关键字字段的范围查询 -
连接查询
-
deprecated geo-shapes的查询
-
每文档成本可能很高的查询:
- script_score查询
- 过滤查询
可以通过将search.allow_private_query
设置的值设置为false
(默认为true
)来阻止此类查询的执行。