13 基本查询与过滤

在上一篇教程中,我们探讨了索引与文档操作之检索文档的基础知识。这次,我们将深入了解 Elasticsearch 的基本查询与过滤功能。这些功能是数据检索的基础,在任何复杂查询的构建中都是不可或缺的。

基本查询理解

Elasticsearch 中,基本查询主要包括:

  1. **匹配查询 (match)**:用于全文检索,支持分词。
  2. **字段匹配查询 (term)**:用于精确匹配,不支持分词。
  3. **范围查询 (range)**:用于检索在某个范围内的数值或日期。
  4. 布尔查询 (bool): 用于组合多个查询条件。
  5. 过滤器 (filter): 用于根据特定条件过滤结果,通常与布尔查询结合使用。

这些查询可以单独使用,也可以结合使用,以满足不同的需求。

1. 匹配查询

假设我们有一个文档索引名为 articles,其中包含以下文档:

1
2
3
4
{
"title": "Elasticsearch Basics",
"content": "Elasticsearch is a powerful search engine."
}

我们想要查找包含 Elasticsearch 的文档,使用匹配查询可以如下执行:

1
2
3
4
5
6
7
8
GET /articles/_search
{
"query": {
"match": {
"content": "Elasticsearch"
}
}
}

2. 字段匹配查询

当我们需要查找完全匹配某个字段的内容时,可以使用过滤查询。例如,假设我们要检索标题为 Elasticsearch Basics 的文章:

1
2
3
4
5
6
7
8
GET /articles/_search
{
"query": {
"term": {
"title": "Elasticsearch Basics"
}
}
}

注意,term 查询是精确的,不会对字符串进行分词处理。

3. 范围查询

在处理数值或日期数据时,范围查询非常有用。比如,我们想查找发布时间在 2022 年到 2023 年之间的所有文章:

1
2
3
4
5
6
7
8
9
10
11
GET /articles/_search
{
"query": {
"range": {
"publish_date": {
"gte": "2022-01-01",
"lte": "2023-01-01"
}
}
}
}

4. 布尔查询

布尔查询用于组合复杂条件。假设我们想查找同时包含 Elasticsearchsearch 的文档:

1
2
3
4
5
6
7
8
9
10
11
GET /articles/_search
{
"query": {
"bool": {
"must": [
{ "match": { "content": "Elasticsearch" }},
{ "match": { "content": "search" }}
]
}
}
}

5. 过滤器

过滤器与查询类似,但它不计算相关性评分,通常用于提高查询性能。比如,我们想要检索所有与 Elasticsearch 相关的文档,同时限制 publish_date 在2022年之后的文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GET /articles/_search
{
"query": {
"bool": {
"must": {
"match": { "content": "Elasticsearch" }
},
"filter": {
"range": {
"publish_date": {
"gte": "2022-01-01"
}
}
}
}
}
}

小结

在本节中,我们探讨了 Elasticsearch 的基本查询功能,包括匹配查询、字段匹配查询、范围查询、布尔查询和过滤器的使用。这些基本查询的组合和灵活应用是构建复杂查询的基础。

下一篇,我们将讨论 Elasticsearch 的复合查询,介绍如何将多个查询组合在一起,形成更复杂的检索机制。通过这些内容的深入了解,希望大家能够在使用 Elasticsearch 时更得心应手。

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论