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

Elasticsearch 中的精确搜索与模糊搜索

Elasticsearch 提供了强大的搜索功能,包括精确搜索和模糊搜索两种主要方式。

精确搜索 (Exact Match)

精确搜索用于查找与查询条件完全匹配的文档。

实现方式:

  1. term 查询

    {"query": {"term": {"field_name": "exact_value"}}
    }
    
    • 用于不分词的字段(keyword类型)
    • 区分大小写
  2. terms 查询(多值精确匹配):

    {"query": {"terms": {"field_name": ["value1", "value2"]}}
    }
    
  3. match_phrase 查询

    {"query": {"match_phrase": {"field_name": "exact phrase"}}
    }
    
    • 用于分词字段但要求短语完全匹配
    • 保持词序不变

模糊搜索 (Fuzzy Search)

模糊搜索用于查找近似匹配的文档,可以容忍拼写错误或轻微差异。

实现方式:

  1. fuzzy 查询

    {"query": {"fuzzy": {"field_name": {"value": "search_term","fuzziness": "AUTO"}}}
    }
    
    • fuzziness参数可以是:
      • 数字(0,1,2等):允许的最大编辑距离
      • “AUTO”:根据词长自动确定
  2. match 查询(带模糊选项):

    {"query": {"match": {"field_name": {"query": "search term","fuzziness": 1}}}
    }
    
  3. wildcard 查询(通配符搜索):

    {"query": {"wildcard": {"field_name": {"value": "te?t*"  // ?匹配单个字符,*匹配多个字符}}}
    }
    
  4. regexp 查询(正则表达式):

    {"query": {"regexp": {"field_name": {"value": "t[ae]st.*"}}}
    }
    

关键区别

特性精确搜索模糊搜索
匹配方式完全匹配近似匹配
性能更高较低
使用场景分类、标签、ID等需要精确匹配的场景文本搜索、容忍拼写错误的场景
是否分析通常不分析(keyword)通常分析(text)
大小写敏感通常不敏感(取决于分析器)

最佳实践

  1. 对需要精确匹配的字段(如ID、状态码)使用keyword类型
  2. 对文本内容使用text类型并配合模糊搜索
  3. 谨慎使用模糊搜索,因为它会影响性能
  4. 合理设置fuzziness参数平衡召回率和精确度
  5. 考虑使用n-gramedge-ngram分词器实现更高效的模糊搜索

相关文章:

  • 从手机随拍到标准扫描件:AI如何智能校正证件照片(Python+OpenCV)
  • 机器人系统ROS中包内节点启动详解和实战示例
  • Maven配置本地仓库、中央仓库、公司私有仓库
  • 笔记04:层叠的定义及添加
  • 【机器学习深度学习】线性回归
  • 高中成绩可视化平台开发笔记
  • Jenkins 部署与使用
  • Nordic nRF52832 寄存器级 UARTE 发送实现
  • Python中的多线程与协程:程序、线程、进程之间的关联关系
  • 发布:大彩DN系列3.2寸全视角IPS串口屏发布!
  • MySQL(基础篇)
  • Django 零基础起步:开发你的网站第一步
  • 阿里推出 R1-Omni:将强化学习与可验证奖励(RLVR)应用于全模态大语言模型
  • 如何将 Memfault 固件 SDK 集成到使用 Nordic 的 nRF Connect SDK(NCS)的项目中
  • LlamaIndex基础概念与核心架构
  • Linux中部署Jenkins保姆间教程
  • [mcp-servers] docs | AI客户端-MCP服务器-AI 架构
  • WPF 实现自定义弹窗输入功能
  • 第一章-人工智能概述-深度学习与AI发展(2/36)
  • 星型模式(Star Schema)