Elasticsearch 的 Query DSL(Domain Specific Language)是构建复杂查询的核心工具,它允许通过 JSON 格式灵活定义搜索条件。无论是全文搜索、精确匹配还是多条件组合,Query DSL 都能高效应对。

🌟 核心特点

  • 结构化语法:基于 JSON 的查询结构,易于理解和扩展
  • 类型丰富:支持 matchtermrangebool 等 20+ 查询类型
  • 可组合性:通过 bool 查询可组合多个条件(如 mustshouldfilter
  • 性能优化:可结合 filter 上下文提升查询效率

🔍 常用查询类型

  1. 全文搜索
    使用 match 查询匹配文本字段内容

    match_query
  2. 精确匹配
    term 查询用于精确值匹配,如 term={"status":"published"}

    term_query
  3. 范围查询
    通过 range 查询筛选数值区间,例如 range={"price":{"gte":10,"lte":100}}

    range_query
  4. 布尔查询
    组合多个查询条件,支持 must(必须匹配)、should(至少匹配)、filter(过滤)等逻辑

    bool_query

📌 示例代码

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "range": { "date": { "gte": "2023-01-01", "lte": "2023-12-31" } }
      ]
    }
  }
}

🔗 想深入了解布尔查询?可参考 Elasticsearch 布尔查询详解

⚠️ 注意事项

  • 避免使用 match 查询进行精确值匹配,优先使用 term
  • 对文本字段使用 match 时,Elasticsearch 会进行分词处理
  • 复杂查询建议结合 filter 上下文提升性能

如需进一步学习,可访问 Elasticsearch 官方文档 获取最新信息。