跳到主要内容

Elasticsearch 查询类型

Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛用于全文搜索、日志分析和实时数据分析。理解 Elasticsearch 的查询类型是掌握其功能的关键。本文将介绍 Elasticsearch 中的主要查询类型,并通过实际案例帮助初学者快速上手。

全文搜索是 Elasticsearch 最常用的查询类型之一,适用于在文本字段中查找匹配的文档。Elasticsearch 会对文本进行分词处理,并根据相关性评分返回结果。

示例:match 查询

json
{
"query": {
"match": {
"content": "Elasticsearch 查询"
}
}
}

输入:搜索 content 字段中包含 "Elasticsearch 查询" 的文档。
输出:返回所有匹配的文档,并按相关性评分排序。

提示

match 查询会对搜索词进行分词处理,因此它会匹配包含 "Elasticsearch" 或 "查询" 的文档。

2. 精确匹配(Exact Match)

精确匹配用于查找与指定值完全匹配的文档。常用的查询类型是 termterms

示例:term 查询

json
{
"query": {
"term": {
"status": "published"
}
}
}

输入:查找 status 字段值为 "published" 的文档。
输出:返回所有 status 字段值为 "published" 的文档。

警告

term 查询不会对搜索词进行分词处理,因此它只匹配完全相同的值。

3. 范围查询(Range Query)

范围查询用于查找字段值在指定范围内的文档。常见的范围查询包括数字、日期等。

示例:range 查询

json
{
"query": {
"range": {
"age": {
"gte": 18,
"lte": 30
}
}
}
}

输入:查找 age 字段值在 18 到 30 之间的文档。
输出:返回所有符合条件的文档。

备注

gte 表示大于等于,lte 表示小于等于。

4. 布尔查询(Boolean Query)

布尔查询允许组合多个查询条件,使用逻辑运算符(mustshouldmust_not)来定义复杂的查询逻辑。

示例:bool 查询

json
{
"query": {
"bool": {
"must": [
{ "match": { "content": "Elasticsearch" } },
{ "range": { "age": { "gte": 18 } } }
],
"must_not": [
{ "term": { "status": "draft" } }
]
}
}
}

输入:查找 content 字段包含 "Elasticsearch" 且 age 大于等于 18,同时 status 不为 "draft" 的文档。
输出:返回所有符合条件的文档。

提示

must 表示所有条件都必须满足,should 表示至少满足一个条件,must_not 表示条件不能满足。

5. 聚合查询(Aggregation Query)

聚合查询用于对数据进行分组和统计,常用于生成报表和分析数据。

示例:terms 聚合

json
{
"size": 0,
"aggs": {
"status_count": {
"terms": {
"field": "status"
}
}
}
}

输入:按 status 字段对文档进行分组统计。
输出:返回每个 status 值的文档数量。

备注

size: 0 表示不返回原始文档,只返回聚合结果。

实际案例

假设你有一个博客系统,需要实现以下功能:

  1. 搜索包含 "Elasticsearch" 的文章。
  2. 查找状态为 "published" 的文章。
  3. 查找发布时间在 2023 年内的文章。
  4. 按文章标签进行分组统计。

你可以使用以下查询组合来实现这些功能:

json
{
"query": {
"bool": {
"must": [
{ "match": { "content": "Elasticsearch" } },
{ "term": { "status": "published" } },
{ "range": { "publish_date": { "gte": "2023-01-01", "lte": "2023-12-31" } } }
]
}
},
"aggs": {
"tags_count": {
"terms": {
"field": "tags"
}
}
}
}

总结

Elasticsearch 提供了丰富的查询类型,包括全文搜索、精确匹配、范围查询、布尔查询和聚合查询。通过灵活组合这些查询类型,你可以实现复杂的搜索和分析需求。希望本文能帮助你更好地理解 Elasticsearch 的查询功能。

附加资源

练习

  1. 使用 match 查询查找包含 "数据分析" 的文档。
  2. 使用 range 查询查找 price 字段值在 100 到 500 之间的文档。
  3. 使用 bool 查询组合多个条件,查找 status 为 "active" 且 age 大于 25 的文档。