Elasticsearch(es)中must以及term的基本使用

文章目录

should 和 must

在 Elasticsearch(ES)中,should 和 must 是布尔查询(Boolean Query)中常用的两个子句。

  1. should 子句:should 表示一个或多个条件之一满足即可匹配文档。它类似于逻辑上的 OR 操作,用于构建可选项或者提升匹配文档的相关性评分。当至少一个 should 子句匹配时,文档将被认为是匹配的。
  2. must 子句:must 表示所有条件都必须满足才能匹配文档。它类似于逻辑上的 AND 操作,用于构建必须满足的查询限制。只有当所有的 must 子句都匹配时,文档才会被认为是匹配的。

需要注意的是,should 和 must 子句可以同时在一个布尔查询中使用,以构建更复杂的查询逻辑。

以下是一个示例,演示了如何在布尔查询中使用 should 和 must 子句:

json 复制代码
{
  "query": {
    "bool": {
      "must": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ],
      "should": [
        { "term": { "field3": "value3" } },
        { "term": { "field4": "value4" } }
      ]
    }
  }
}

在上述示例中,must 子句包含了两个条件,即 field1 的值必须为 "value1",并且 field2 的值必须为 "value2"。这两个条件都必须满足才能匹配文档。

而 should 子句包含了两个条件,即 field3 的值可以为 "value3" 或者 field4 的值可以为 "value4"。只要满足其中一个条件,文档就会被认为是匹配的。

term 和 range

在 Elasticsearch(ES)中,term 和 range 是查询语句中常用的两种查询类型。

  1. term 查询:term 查询用于精确匹配某个字段的值。它会搜索指定字段中与给定项完全匹配的文档。term 查询是基于倒排索引的精确匹配查询,适用于关键字、枚举值等不需要分词的字段。
    以下是一个示例,演示如何使用 term 查询:
json 复制代码
{
  "query": {
    "term": {
      "field": "value"
    }
  }
}

在上述示例中,term 查询用于匹配 field 字段的值为 "value" 的文档。

  1. range 查询:range 查询用于匹配指定字段中的范围值。它可以匹配数值、日期等类型的字段,并允许指定包含、不包含等关系运算符。
    以下是一个示例,演示如何使用 range 查询:
json 复制代码
{
  "query": {
    "range": {
      "field": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

在上述示例中,range 查询用于匹配 field 字段的值在 10 到 20 之间(包含边界值)的文档。

range 查询支持以下关系运算符:

  • gt:大于
  • gte:大于等于
  • lt:小于
  • lte:小于等于
    通过组合这些运算符,可以构建各种范围查询条件。

需要注意的是,在使用 range 查询时,字段的类型必须是可排序的,例如数值或日期类型。

常见的查询方式

Elasticsearch(ES)提供了多种查询方式,用于根据不同的需求进行数据检索和分析。以下是一些常用的 ES 查询方式:

  1. Match 查询:用于执行全文本搜索,匹配特定字段中包含给定词条的文档。它会对搜索词进行分词,然后在索引中查找匹配的文档。

  2. Term 查询:用于精确匹配某个字段的值。它会搜索指定字段中与给定项完全匹配的文档。Term 查询适用于关键字、枚举值等不需要分词的字段。

  3. Range 查询:用于匹配指定字段中的范围值。它可以匹配数值、日期等类型的字段,并允许指定包含、不包含等关系运算符。

  4. Bool 查询:用于执行布尔逻辑组合的查询。可以使用 must、should 和 must_not 子句来构建复合查询,实现与、或、非等逻辑运算。

  5. Match Phrase 查询:类似于 Match 查询,但要求匹配的词条必须按顺序连续出现在文档中。

  6. Wildcard 查询:用于执行通配符搜索,匹配指定字段中符合通配符模式的文档。

  7. Fuzzy 查询:用于执行模糊搜索,匹配与指定词条相似的文档。它可以处理拼写错误、近似词等情况。

  8. Aggregations(聚合查询):用于执行数据分析和聚合操作,例如计算平均值、求和、分组等。

  9. Nested 查询:用于查询嵌套对象的属性。它可以在嵌套的对象或数组字段中执行查询。

  10. Geo 查询:用于执行地理位置相关的查询,例如搜索附近的地点、根据地理坐标过滤等。

这只是一部分常用的 ES 查询方式,ES 还提供了更多功能强大的查询类型和查询参数,用于满足各种数据检索和分析的需求。

相关推荐
hengzhepa4 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
bubble小拾12 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
不能放弃治疗13 小时前
重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)
elasticsearch
hengzhepa13 小时前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
Elastic 中国社区官方博客15 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
慕雪华年16 小时前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch
Elastic 中国社区官方博客18 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
alfiy19 小时前
Elasticsearch学习笔记(四) Elasticsearch集群安全配置一
笔记·学习·elasticsearch
alfiy20 小时前
Elasticsearch学习笔记(五)Elastic stack安全配置二
笔记·学习·elasticsearch
丶21362 天前
【大数据】Elasticsearch 实战应用总结
大数据·elasticsearch·搜索引擎