es基本查询

查询类型概述

Elasticsearch 提供了多种查询方式,包括 matchtermrange 查询,适用于不同的场景。以下是它们的详细说明和用法。

match 查询(模糊匹配)

match 查询是一种全文搜索查询,会对查询文本进行分词处理,适用于文本字段的分析搜索。它支持模糊匹配和相关性评分。

{
  "query": {
    "match": {
      "field_name": "search text"
    }
  }
}

  • 适用于 text 类型的字段,会经过分词器处理。
  • 支持模糊匹配,可以通过 fuzziness 参数调整容错级别。
  • 默认使用 OR 逻辑,可以通过 operator 参数改为 AND。

term 查询(精准匹配)

term 查询用于精确匹配,不会对查询值进行分词处理,适用于 keyword 类型或未分析的字段。

{
  "query": {
    "term": {
      "field_name": {
        "value": "exact_value"
      }
    }
  }
}

  • 适用于精确匹配,如枚举值、ID 或 keyword 类型的字段。
  • 不会进行分词,直接匹配字段的原始值。
  • 可以结合 terms 查询实现多值匹配。

range 查询(精准匹配)

range 查询用于范围匹配,支持数值、日期等可比较的字段类型。

{
  "query": {
    "range": {
      "field_name": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

  • 支持的操作符:
    • gt:大于
    • gte:大于等于
    • lt:小于
    • lte:小于等于
  • 适用于日期、数值等范围筛选。

组合查询示例

可以结合 bool 查询将多种条件组合使用:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "elasticsearch" } },
        { "term": { "status": "published" } },
        { "range": { "date": { "gte": "2023-01-01" } } }
      ]
    }
  }
}

  • must:所有条件必须满足(AND 逻辑)。
  • should:只有should查询时,至少满足一个条件(OR 逻辑)。如果should与must一块使用,满不满足should条件都可以。满足should条件的数据得发高,排序靠前。
  • must_not:排除符合条件的文档。

性能优化建议

  • 对精确匹配字段使用 keyword 类型,并结合 term 查询。
  • 对需要全文搜索的字段使用 text 类型,并结合 match 查询。
  • 使用 range 查询时,对数值或日期字段添加索引优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值