ElasticSearch 实战:查询ES中的数据 (基于DSL的查询, 包括validate、match、bool)

在Elasticsearch中,DSL(Domain Specific Language)是一种基于JSON格式的查询语言,用于表达复杂的搜索条件和操作。以下是一些基于DSL的查询实例:

1. Validate查询(验证查询语法)

验证一个查询DSL是否合法,而不实际执行查询。

POST /_validate/query
{
  "explain": true, // 是否显示解释信息
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

2. Match查询

最基础的全文本查询,匹配指定字段中的文本。

GET /my_index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "Elasticsearch tutorial",
        "operator": "and" // 可选,默认为or,可以改为and来要求所有词都要匹配
      }
    }
  }
}

3. Bool复合查询

Bool查询允许组合多个查询条件,支持must(必须满足)、should(至少满足一个)、must_not(必须不满足)子句。

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [ // 必须满足以下条件
        {"match": {"title": "Elasticsearch"}},
        {"range": {"publish_date": {"gte": "2020-01-01"}}}
      ],
      "should": [ // 至少满足一个
        {"match_phrase": {"summary": "getting started"}}
      ],
      "must_not": [ // 必须不满足以下条件
        {"term": {"status": "draft"}}
      ]
    }
  }
}

4. 更复杂的查询示例(包含filter上下文)

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"title": "Elasticsearch"}},
        {"range": {"publish_date": {"gte": "now-1y"}}}
      ],
      "filter": [ // 过滤器不影响评分,只筛选文档
        {"term": {"category": "tutorials"}},
        {"terms": {"tags": ["elasticsearch", "search"]}}
      ]
    }
  },
  "sort": [
    {"publish_date": {"order": "desc"}}
  ],
  "size": 10
}

以上实例展示了如何使用Elasticsearch的DSL进行基本查询和复合查询。在实际应用中,根据业务需求可以组合更多的查询条件和过滤条件,以及配合使用聚合(Aggregations)进行数据统计分析。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值