Elasticsearch模糊查询之Wildcard

{"wildcard" : { "LPR.keyword" : { "wildcard" : "${Keyword}"} }},你的示例中使用了 wildcard 查询,它适用于模糊搜索,允许使用通配符(* 和 ?)来匹配字段值。你使用了 keyword 子字段来确保精确匹配,这是一个常见的做法,因为 keyword 字段不会进行分词,可以直接用于通配符查询。

示例解释

假设你的索引中有一个字段 LPR,它被定义为一个 text 字段,同时有一个 keyword 子字段用于精确匹配和通配符查询:

映射定义示例

复制代码
PUT /my_index
{
  "mappings": {
    "properties": {
      "LPR": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

wildcard 查询示例

你想要在 LPR.keyword 字段中进行通配符查询,以下是查询的 JSON 格式:

复制代码
GET /my_index/_search
{
  "query": {
    "wildcard": {
      "LPR.keyword": {
        "wildcard": "${Keyword}"
      }
    }
  }
}

wildcard 查询用于匹配符合通配符模式的文档。

LPR.keyword 指定要在 LPR 字段的 keyword 子字段上进行查询。

${Keyword} 是一个变量,代表你要搜索的通配符模式(例如,abc ,abc*,a*c,等)。

示例查询

假设你想要查找所有在 LPR 字段中包含 "abc" 的文档,你可以将 ${Keyword} 替换为实际的通配符模式:

复制代码
GET /my_index/_search
{
  "query": {
    "wildcard": {
      "LPR.keyword": {
        "wildcard": "*abc*"
      }
    }
  }
}

详细解释

"abc ":这个通配符模式表示匹配所有包含 "abc" 的文档,无论 "abc" 前后有多少字符。

使用注意事项

性能:通配符查询,特别是以 * 开头的查询(例如 "abc "),可能会很慢,因为它们需要扫描大量文档。对于大数据集,最好避免这种查询,或者使用其他索引优化策略。

大小写敏感:keyword 字段是大小写敏感的。如果需要大小写不敏感的匹配,可以考虑在索引时标准化数据(例如,转换为小写)。

Wildcard(通配符)中的*和?区别

Wildcard(通配符)中的*和?在功能和使用上存在明显的区别,主要体现在它们所能匹配的字符数量和范围上。

  1. *(星号)
    功能:在通配符中代表零个、一个或多个字符。这意味着它可以匹配任意长度的字符串,包括空字符串。
    使用场景:常用于模糊搜索,特别是在需要匹配多个字符或者不确定具体字符数量的情况下。例如,在文件名匹配中,.txt可以匹配所有以.txt结尾的文件,无论其前缀是什么。
    注意事项:由于可以匹配任意长度的字符串,包括零个字符,因此在某些情况下可能会导致意外的匹配结果。因此,在使用时需要特别注意匹配模式的精确性。
  2. ?(问号)
    功能:?在通配符中代表任意一个字符。这意味着它只能匹配一个字符,无论这个字符是什么。
    使用场景:?通常用于需要精确匹配一个字符但不确定这个字符具体是什么的情况。例如,在文件名匹配中,report?.txt可以匹配report1.txt、reportA.txt等,但不会匹配report.txt或reporttwo.txt。
    注意事项:由于?只能匹配一个字符,因此在使用时需要确保匹配模式中的?数量与要匹配的字符数量一致。
相关推荐
小飞Coding4 小时前
ES 性能调优核心:读懂线程栈,告别“请求被拒绝”与“集群卡顿”
elasticsearch
Elastic 中国社区官方博客5 小时前
现已正式发布: Elastic Cloud Hosted 上的托管 OTLP Endpoint
大数据·运维·数据库·功能测试·elasticsearch·全文检索
小飞Coding5 小时前
一文吃透 Elasticsearch 索引模板+别名:零误导、可复现的生产级实践
elasticsearch
顾北129 小时前
从零搭建 ELK 栈(ES+Kibana+Logstash):含 IK + 拼音分词,MySQL 同步 ES 完整配置
运维·elasticsearch
@土豆11 小时前
K8s 环境部署夜莺监控(Nightingale)平台(核心告警管理版)
elasticsearch·容器·kubernetes
Elastic 中国社区官方博客11 小时前
Observabilty:自动化错误分诊 - 从被动到自主
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
Elasticsearch12 小时前
Elasticsearch:shell 工具不是上下文工程的银弹
elasticsearch
学习使我快乐——玉祥12 小时前
ElasticSearch离线安装
大数据·elasticsearch·jenkins
sjmaysee13 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
Elastic 中国社区官方博客14 小时前
Serverless 中用于负载均衡的 Elasticsearch 副本
大数据·运维·人工智能·elasticsearch·搜索引擎·云原生·serverless