【Elasticsearch】 02-查询语法详解及示例

1. 简介

Elasticsearch 是一款强大的开源搜索引擎,它提供了丰富的查询语法,用于高效地检索和分析大规模数据。本文将详细介绍 Elasticsearch 查询语法的基础知识,并提供多个实际示例,帮助您更好地理解和使用 Elasticsearch 的查询功能。

2. 查询语法基础

2.1 请求体结构

在 Elasticsearch 中,查询是通过发送 JSON 格式的请求体来实现的。请求体包含了查询的各种参数和条件。以下是一个简单的 Elasticsearch 查询请求的示例:

GET /index_name/_search
{
  "query": {
    "match": {
      "field_name": "search_keyword"
    }
  }
}

上述查询使用了 match 查询类型,用于在指定字段中搜索匹配给定关键字的文档。您可以根据实际需求选择不同的查询类型。

2.2 查询类型

Elasticsearch 提供了多种查询类型,每种类型都有不同的功能和用法。以下是几种常用的查询类型及示例:

3. 全文搜索查询

全文搜索是 Elasticsearch 最常用的查询方式之一。它允许您在指定字段中搜索与关键字匹配的文档。常用的全文搜索查询类型包括 match、multi_match 和 query_string。

3.1 match 查询

match 查询用于在单个字段中搜索匹配给定关键字的文档。示例:

{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}

3.2 multi_match 查询

multi_match 查询用于在多个字段中搜索匹配给定关键字的文档。示例:

{
  "query": {
    "multi_match": {
      "query": "search_keyword",
      "fields": ["title", "content"]
    }
  }
}

3.3 query_string 查询

query_string 查询允许您使用 Lucene 查询语法进行更复杂的

查询。示例:

{
  "query": {
    "query_string": {
      "query": "title:(elasticsearch OR search) AND content:(query OR language)"
    }
  }
}

4. 过滤查询

过滤查询用于根据条件筛选文档,而不计算相关性分数。这种类型的查询对于快速过滤大量文档非常有效。常用的过滤查询类型包括 term、range 和 bool。

4.1 term 查询

term 查询用于精确匹配某个字段的值。示例:

{
  "query": {
    "term": {
      "category": "books"
    }
  }
}

4.2 range 查询

range 查询用于按范围条件过滤文档。示例:

{
  "query": {
    "range": {
      "price": {
        "gte": 20,
        "lte": 50
      }
    }
  }
}

4.3 bool 查询

bool 查询允许您根据逻辑条件组合多个子查询。示例:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "elasticsearch" } },
        { "range": { "price": { "gte": 20 } } }
      ],
      "must_not": [
        { "term": { "category": "books" } }
      ]
    }
  }
}

5. 聚合查询

聚合查询用于根据指定的条件对文档进行分组和统计。聚合查询可以用于生成各种数据分析报告。常用的聚合查询类型包括 terms、date_histogram 和 avg。

5.1 terms 聚合

terms 聚合用于按指定字段进行分组,并统计每个分组的文档数量。示例:

{
  "aggs": {
    "genres": {
      "terms": {
        "field": "genre.keyword"
      }
    }
  }
}

5.2 date_histogram 聚合

date_histogram 聚合用于按指定时间间隔对文档进行分组,并统计每个时间段的文档数量。示例:

{
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      }
    }
  }
}

5.3 avg 聚合

avg 聚合用于计算指定字段的平均值。示例:

{
  "aggs": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}

6. 高级查询技巧

除了基本的查询类型外,Elasticsearch 还提供了一些高级查询技巧,用于实现更复杂的查询需求。以下是其中几个常用的技巧及示例:

6.1 模糊查询

Elasticsearch 支持模糊查询,即在

搜索关键字时允许一定程度的拼写错误或变体。可以使用 match 查询的 fuzziness 参数来实现模糊查询。示例:

{
  "query": {
    "match": {
      "title": {
        "query": "elastiksearch",
        "fuzziness": "2"
      }
    }
  }
}

6.2 排序和分页

Elasticsearch 允许您对搜索结果进行排序和分页,以便更好地管理和展示数据。可以使用 sort 和 from/size 参数来实现排序和分页功能。示例:

{
  "query": {
    "match_all": {}
  },
  "sort": [
    { "date": { "order": "desc" } }
  ],
  "from": 0,
  "size": 10
}

6.3 多字段查询

在查询时,您可以指定多个字段进行匹配。示例:

{
  "query": {
    "multi_match": {
      "query": "search_keyword",
      "fields": ["title^3", "content"]
    }
  }
}

6.4 嵌套查询

嵌套查询允许您在文档的嵌套字段中进行查询。示例:

{
  "query": {
    "nested": {
      "path": "comments",
      "query": {
        "match": {
          "comments.text": "great"
        }
      }
    }
  }
}

7. 结论

本文详细介绍了 Elasticsearch 查询语法的基础知识,并提供了多个常用查询类型和高级查询技巧的示例。希望通过本文的阐述,您对 Elasticsearch 的查询功能有了更深入的了解,并能够在实际应用中灵活运用。如果您对 Elasticsearch 查询语法还有更多疑问,请查阅官方文档或其他相关资源进行深入学习。

8. 参考链接

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值