【Elasticsearch】精准匹配检索(Exact Match)

1.检索分类

1.1 精准匹配检索(Exact Match)

  • Term
  • Terms
  • Range
  • Exists
  • Prefix
  • Wildcard
  • Regexp
  • Ids

1.2 全文检索(Full Text Search)

  • Match
  • Match Phrase
  • Match Phrase Prefix
  • Multi Match
  • Query String
  • Simple Query String

1.3 复合检索(Compound Queries)

  • Bool
  • Boosting
  • Constant Score
  • Dis Max
  • Function Score

1.4 特殊检索

  • Nested Query(嵌套查询)
  • Geo Query(地理空间查询)
  • Script Query(脚本查询)
  • More Like This Query(相似文档查询)

2.精准匹配检索案例集

2.1 准备测试数据

创建一个索引。

PUT /products
{
  "mappings": {
    "properties": {
      "name": {"type": "text", "fields": {"keyword": {"type": "keyword"}}},
      "price": {"type": "double"},
      "category": {"type": "keyword"},
      "tags": {"type": "keyword"},
      "description": {"type": "text"},
      "stock": {"type": "integer"},
      "sku": {"type": "keyword"},
      "created_at": {"type": "date"},
      "metadata": {"type": "object"}
    }
  }
}

插入测试数据。

POST /products/_bulk
{"index":{}}
{"name":"Laptop X1","price":1299.99,"category":"electronics","tags":["new","sale"],"description":"High performance laptop","stock":50,"sku":"LP-X1-2023","created_at":"2023-01-15","metadata":{"weight":1.5,"color":"silver"}}
{"index":{}}
{"name":"Smartphone S10","price":899.99,"category":"electronics","tags":["new","popular"],"description":"Latest smartphone model","stock":120,"sku":"SP-S10-2023","created_at":"2023-02-20","metadata":{"weight":0.3,"color":"black"}}
{"index":{}}
{"name":"Wireless Headphones","price":199.99,"category":"audio","tags":["sale","popular"],"description":"Noise cancelling headphones","stock":75,"sku":"WH-200-2022","created_at":"2022-11-10","metadata":{"weight":0.25,"color":"white"}}
{"index":{}}
{"name":"Smart Watch","price":249.99,"category":"wearables","tags":["new","featured"],"description":"Fitness tracking smartwatch","stock":30,"sku":"SW-500-2023","created_at":"2023-03-05","metadata":{"weight":0.1,"color":"black"}}
{"index":{}}
{"name":"4K TV","price":1499.99,"category":"electronics","tags":["premium","large"],"description":"55-inch 4K television","stock":15,"sku":"TV-4K-55-2023","created_at":"2023-01-25","metadata":{"weight":18.5,"color":"black"}}
{"index":{}}
{"name":"Bluetooth Speaker","price":129.99,"category":"audio","tags":["portable"],"description":"Waterproof bluetooth speaker","stock":60,"sku":"BS-100-2022","created_at":"2022-12-15","metadata":{"weight":0.8,"color":"blue"}}
{"index":{}}
{"name":"Gaming Mouse","price":79.99,"category":"accessories","tags":["gaming"],"description":"High DPI gaming mouse","stock":90,"sku":"GM-X200","created_at":"2023-02-01","metadata":{"weight":0.12,"color":"rgb"}}
{"index":{}}
{"name":"External SSD 1TB","price":159.99,"category":"storage","tags":["fast","reliable"],"description":"Portable SSD drive","stock":45,"sku":"ESSD-1TB-2023","created_at":"2023-03-10","metadata":{"weight":0.05,"color":"gray"}}
{"index":{}}
{"name":"Keyboard Pro","price":109.99,"category":"accessories","tags":["ergonomic"],"description":"Mechanical keyboard","stock":25,"sku":"KB-PRO-2023","created_at":"2023-03-15","metadata":{"weight":1.1,"color":"black"}}
{"index":{}}
{"name":"Tablet T8","price":499.99,"category":"electronics","tags":["new","portable"],"description":"10-inch tablet","stock":40,"sku":"TAB-T8-2023","created_at":"2023-02-28","metadata":{"weight":0.5,"color":"silver"}}
{"index":{}}
{"name":"Camera DSLR","price":899.99,"category":"photography","tags":["professional"],"description":"24MP DSLR camera","stock":20,"sku":"CAM-DSLR-24","created_at":"2023-01-10","metadata":{"weight":0.7,"color":"black"}}
{"index":{}}
{"name":"Monitor 27\"","price":299.99,"category":"electronics","tags":["office"],"description":"27-inch office monitor","stock":35,"sku":"MON-27-2023","created_at":"2023-02-15","metadata":{"weight":4.2,"color":"black"}}

在这里插入图片描述

2.2 各种精准匹配检索案例

2.2.1 Term Query - 精确值匹配

查找类别(category)精确为 electronics 的产品。

GET /products/_search
{
  "query": {
    "term": {
      "category": "electronics"
    }
  }
}

在这里插入图片描述

2.2.2 Terms Query - 多值精确匹配

查找类别为 electronicsaudio 的产品。

GET /products/_search
{
  "query": {
    "terms": {
      "category": ["electronics", "audio"]
    }
  }
}

在这里插入图片描述

2.2.3 Range Query - 范围查询

查找价格在 100 100 100 300 300 300 之间的产品。

GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 300
      }
    }
  }
}

在这里插入图片描述

2.2.4 Exists Query - 存在性查询

查找有 metadata.color 字段的产品。

GET /products/_search
{
  "query": {
    "exists": {
      "field": "metadata.color"
    }
  }
}

在这里插入图片描述

2.2.5 Prefix Query - 前缀查询

查找 skuSP 开头的产品(智能手机)。

GET /products/_search
{
  "query": {
    "prefix": {
      "sku": "SP"
    }
  }
}

在这里插入图片描述

2.2.6 Wildcard Query - 通配符查询

查找 sku 格式为 *-2023 的产品(2023 年产品)。

GET /products/_search
{
  "query": {
    "wildcard": {
      "sku": {
        "value": "*-2023"
      }
    }
  }
}

在这里插入图片描述

2.2.7 Regexp Query - 正则表达式查询

查找颜色为 blackblue 的产品(使用正则表达式)。

GET /products/_search
{
  "query": {
    "regexp": {
      "metadata.color": "bl(a|u)(ck|e)"
    }
  }
}

在这里插入图片描述

2.2.8 Ids Query - ID 查询

根据文档 ID 查询特定文档。

GET /products/_search
{
  "query": {
    "ids": {
      "values": ["KWgilpcB9mA5oeTvIj0n", "KmgilpcB9mA5oeTvIj0n"]
    }
  }
}

在这里插入图片描述

2.2.9 Terms Set Query - 最小匹配项查询

查找至少匹配指定标签中 2 个的产品。

GET /products/_search
{
  "query": {
    "terms_set": {
      "tags": {
        "terms": ["new", "sale", "popular"],
        "minimum_should_match_script": {
          "source": "2"
        }
      }
    }
  }
}

在这里插入图片描述

2.2.10 Fuzzy Query - 模糊查询

查找名称类似于 Lapotp 的产品(容忍拼写错误)。

GET /products/_search
{
  "query": {
    "fuzzy": {
      "name.keyword": {
        "value": "Lapotp X1",
        "fuzziness": "AUTO"
      }
    }
  }
}

在这里插入图片描述

最佳实践建议

  • 默认的 fuzziness="AUTO" 允许的最大编辑距离是 2 2 2
  • 对文本内容使用 text 类型字段进行模糊搜索。
  • 对精确匹配的标识符使用 keyword 类型。
  • 模糊查询时:
    • 对于短词( ≤ 5 ≤5 5 字符):fuzziness=1
    • 中等长度( 6 − 10 6-10 610 字符):fuzziness=2
    • 长词( > 10 >10 >10 字符):fuzziness=3

2.3 复合精准查询示例

查询条件如下:

  • 类别为 electronics
  • 价格 ≥ 500 ≥500 500
  • 有颜色元数据
  • 且不是 2022 年产品(sku 不以 -2022 结尾)
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "term": { "category": "electronics" } },
        { "range": { "price": { "gte": 500 } } },
        { "exists": { "field": "metadata.color" } }
      ],
      "must_not": [
        { "wildcard": { "sku": "*-2022" } }
      ]
    }
  }
}

在这里插入图片描述

3.精准匹配检索与全文检索的区别

特性精准匹配检索全文检索
匹配方式精确匹配字段的完整值对文本进行分析后匹配
分析器处理不经过分析器处理经过分析器处理(分词、大小写转换等)
大小写敏感通常敏感通常不敏感(取决于分析器配置)
适用场景结构化数据(如 ID、状态码、标签等)非结构化文本(如文章内容、描述等)
查询示例{"term": {"status": "published"}}{"match": {"content": "elasticsearch tutorial"}}
性能通常更快(使用倒排索引直接查找)相对较慢(需要分析查询文本)
评分机制通常返回固定分数基于相关性评分
部分匹配不支持支持(取决于分析器)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G皮T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值