原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl.html
本地英文版地址: ../en/query-dsl.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
Elasticsearch 提供了一个完整的基于 JSON 的 Query DSL(Domain Specific Language, 领域专用语言)来定义查询。 可以把 Query DSL 想象成查询的 AST(Abstract Syntax Tree, 抽象语法树),由两种类型的子句组成:
根据查询子句是用于 query 还是 filter 的上下文 中,它们的行为会有所不同。
- 允许执行昂贵的查询
-
某些类型的查询通常会因其实现方式而执行缓慢,这会影响集群的稳定性。 这些查询可以分类如下:
-
需要进行线性扫描来识别匹配的查询:
-
具有较高的前期成本的查询:
-
fuzzy 查询
-
regexp 查询
-
不带
index_prefixes
的prefix 查询
-
wildcard 查询
-
在
text
和keyword
字段上的 range 查询
-
-
联结查询 (joining queries)
- 对 已弃用的地理形状 的查询
-
每个文档的成本可能很高的查询:
-
通过将 search.allow_expensive_queries
设置为false
(默认为 true
),可以防止执行此类查询。