当前位置: 首页 > news >正文

列出es查询match、term、wildcard、prefix、fuzzy、range、query_string、text、missing的区别及用法

1. match 查询

  • 用途:全文搜索,对查询文本进行分词后匹配。

  • 分析器处理:会使用字段映射的分析器处理查询文本。

  • 适用字段text 类型字段(分词后的文本)。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"match": {"content": "quick brown fox"}}
    }
  • 注意:支持模糊匹配、运算符(如 AND/OR)和权重设置。


2. term 查询

  • 用途:精确匹配未经分词的词项。

  • 分析器处理:不分析查询词,直接匹配字段的原始值。

  • 适用字段keyword 类型字段或未分词的字段。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"term": {"status.keyword": "published"}}
    }
  • 注意:若字段是 text 类型,需用 .keyword 子字段。


3. wildcard 查询

  • 用途:通配符匹配(支持 * 和 ?)。

  • 分析器处理:不分析查询词。

  • 适用字段keyword 类型字段。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"wildcard": {"title.keyword": "el*stic"}}
    }
  • 注意:通配符在前缀(如 *test)时性能较差,慎用。


4. prefix 查询

  • 用途:匹配以指定前缀开头的词项。

  • 分析器处理:不分析查询词。

  • 适用字段keyword 类型字段。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"prefix": {"tag.keyword": "el"}}
    }
  • 注意:适合自动补全场景,但需注意索引设计。


5. fuzzy 查询

  • 用途:模糊匹配,允许拼写错误(基于编辑距离)。

  • 分析器处理:不分析查询词。

  • 适用字段keyword 或 text(需结合 .keyword)。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"fuzzy": {"author.keyword": {"value": "schwarzenegger","fuzziness": 2}}}
    }
  • 注意fuzziness 参数控制最大允许编辑距离。


6. range 查询

  • 用途:范围查询(数值、日期等)。

  • 分析器处理:不分析查询词。

  • 适用字段:数值、日期、字符串(按字典序)。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"range": {"price": {"gte": 100,"lte": 500}}}
    }
  • 注意:支持 gt/gte/lt/lte 操作符。


7. query_string 查询

  • 用途:支持复杂查询语法(如布尔逻辑、通配符)。

  • 分析器处理:默认使用字段的分析器。

  • 适用字段text 或 keyword 类型。

  • 示例

    json

    复制

    下载

    GET /_search
    {"query": {"query_string": {"query": "(error OR warn) AND service:nginx"}}
    }
  • 注意:语法复杂,需防范注入攻击,生产环境慎用。


8. text 查询

  • 说明:Elasticsearch 没有单独的 text 查询类型,通常指对 text 类型字段使用 match 查询。

  • 正确用法

    json

    复制

    下载

    GET /_search
    {"query": {"match": {"content": "search text"}}
    }

9. missing 查询(已废弃)

  • 用途:查找缺失某字段的文档(ES 7.0+ 已移除,改用 exists 反向查询)。

  • 替代方案

    json

    复制

    下载

    GET /_search
    {"query": {"bool": {"must_not": {"exists": {"field": "optional_field"}}}}
    }

对比总结

查询类型分词处理适用场景性能注意
match✔️全文搜索高效,支持复杂逻辑
term✖️精确匹配(如状态、标签)需字段为 keyword
wildcard✖️通配符匹配(少量前缀)避免前缀通配符 *
prefix✖️前缀匹配(自动补全)适合有限前缀场景
fuzzy✖️容错搜索(拼写错误)控制 fuzziness
range✖️数值/日期范围过滤数值字段优化更好
query_string✔️复杂语法搜索(开发调试用)避免直接暴露给用户
missing✖️查找缺失字段(旧版本)使用 exists 替代

使用建议

  1. 优先选择 match 和 term:覆盖大部分全文和精确匹配需求。

  2. 慎用通配符wildcard 和 prefix 在大型索引中可能影响性能。

  3. 数值/日期范围:使用 range 查询时确保字段类型正确。

  4. 模糊查询:合理设置 fuzziness 避免过多噪声结果。

  5. 字段类型敏感:区分 text(分词)和 keyword(未分词)的使用场景。

相关文章:

  • 数据可视化 —— 饼图
  • 人工智能时代的网络安全威胁
  • EN18031测试,EN18031认证,EN18031报告解读
  • [Jupyter Notebook]:Jupyter Notebook 安装教程(代码编辑器)
  • C# 高级编程:Linq
  • uniapp跳转和获取参数方式
  • 基于javaweb的SpringBoot新闻发布系统设计与实现(源码+文档+部署讲解)
  • ultralytics-YOLO模型在windows环境部署
  • C++学习:六个月从基础到就业——模板编程:模板特化
  • css响应式布局设置子元素高度和宽度一样
  • 华为 MRAG:多模态检索增强生成技术论文阅读
  • 深度学习涉及的数学与计算机知识总结
  • [论文阅读]Practical Poisoning Attacks against Retrieval-Augmented Generation
  • 如何打包一个QT 程序
  • SmolVLM2: The Smollest Video Model Ever(六)
  • 6.图的OJ题(1-10,未完)
  • 线上JVM调优与全栈性能优化 - Java架构师面试实战
  • CesiumEarth更新至1.14.0版本,重新设计了图层设置页面,优化了许多界面交互问题
  • rabbitmq常用命令
  • PHP实现 Apple ID 登录的服务端验证指南
  • 北京亦庄启动青年人才创新创业生态示范区
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号
  • 中老铁路跨境国际旅客突破50万人次
  • 解放日报:中国大模型企业的发展机遇已经到来
  • 中国公民在日本被机动车碾压身亡,我使馆发布提醒
  • 夜读丨怀念那个写信的年代