es查询语法
时间: 2025-05-31 16:54:15 浏览: 14
### Elasticsearch 查询语法与示例
Elasticsearch 提供了一种灵活而强大的查询 DSL(Domain Specific Language),用于执行各种类型的搜索操作。以下是关于如何构建基本查询以及复杂条件查询的说明。
#### 基本查询结构
Elasticsearch 的查询通常是一个 JSON 对象,其中 `query` 是核心部分。它定义了具体的查询逻辑。下面展示了一个简单的全文检索例子:
```json
{
"query": {
"match": {
"title": "how to make millions"
}
}
}
```
此查询会返回字段 `title` 中包含短语 `"how to make millions"` 的所有文档[^1]。
#### 复合查询
为了满足更复杂的业务需求,可以使用布尔查询 (`bool`) 来组合多个子查询。例如,在查找标题中包含特定关键词的同时排除某些标签,并优先显示具有特殊标记或时间范围内的数据:
```json
{
"query": {
"bool": {
"must": [
{ "match": { "title": "how to make millions" } },
{ "exists": { "field": "tag" } }
],
"filter": [
{ "term": { "status": "published" } }
],
"should": [
{ "term": { "tag": "starred" } },
{ "range": { "publish_date": { "lt": "2014-01-01" } } }
],
"must_not": [
{ "term": { "tag": "spam" } }
]
}
}
}
```
在此复合查询中:
- **`must`**: 所有条件都需满足才能匹配。
- **`filter`**: 不影响评分但过滤掉不符合条件的结果。
- **`should`**: 至少一条应满足;越多越可能提高得分。
- **`must_not`**: 排除符合条件的内容。
以上配置确保只选取那些未标注为垃圾邮件(`spam`)的文章,同时偏好于带有星标(`starred`)或者早于指定日期发布的文章。
#### 范围查询
当需要基于数值型或日期型字段筛选时,可采用如下形式:
```json
{
"query": {
"range": {
"age": {
"gte": 30,
"lte": 40
}
}
}
}
```
该片段表示寻找年龄介于30至40岁之间的记录。
---
阅读全文
相关推荐

















