Jupyter AI

13 Elasticsearch 数据搜索引擎教程:基本查询与过滤

📅 发表日期: 2024年8月15日

分类: 🔍Elasticsearch 入门

👁️阅读: --

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

基本查询理解

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

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

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

1. 匹配查询

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

{
  "title": "Elasticsearch Basics",
  "content": "Elasticsearch is a powerful search engine."
}

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

GET /articles/_search
{
  "query": {
    "match": {
      "content": "Elasticsearch"
    }
  }
}

2. 字段匹配查询

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

GET /articles/_search
{
  "query": {
    "term": {
      "title": "Elasticsearch Basics"
    }
  }
}

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

3. 范围查询

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

GET /articles/_search
{
  "query": {
    "range": {
      "publish_date": {
        "gte": "2022-01-01",
        "lte": "2023-01-01"
      }
    }
  }
}

4. 布尔查询

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

GET /articles/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "content": "Elasticsearch" }},
        { "match": { "content": "search" }}
      ]
    }
  }
}

5. 过滤器

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

GET /articles/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { "content": "Elasticsearch" }
      },
      "filter": {
        "range": {
          "publish_date": {
            "gte": "2022-01-01"
          }
        }
      }
    }
  }
}

小结

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

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

🔍Elasticsearch 入门 (滚动鼠标查看)