当前位置: 首页 > 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分词器实现更高效的模糊搜索
http://www.lryc.cn/news/575454.html

相关文章:

  • electron 如何配置 打开控制台
  • Android 开发 获取Debug 跟 Release 包的SHA1值
  • DeepSeek16-open-webui Pipelines开发填坑
  • C语言再出发:2025年AI时代的关键语言
  • 华为云Flexus+DeepSeek征文|基于华为云一键部署 Dify-LLM 平台,结合 MCP 工具与 DeepSeek 模型打造智能学习助手
  • 【stm32】HAL库开发——Cube配置基本定时器
  • 猴子爬山(华为OD)
  • 什么是回归测试?什么时候需要做回归测试?
  • bug复盘:MCP SSE Client 生命周期问题之context.Background() 的使用
  • B站视频下载技术揭秘:从浏览器抓包到FFmpeg音视频合成
  • 0 数学习题本
  • GraphQL注入 -- GPN CTF 2025 Real Christmas
  • 开发语言漫谈-R语言
  • Apache 支持 HTTPS
  • Hive3.1.3加载paimon-hive-connector-3.1-1.1.1.jar报错UnsatisfiedLinkError
  • C++ Programming Language —— 第3章:运算符
  • HDFS(Hadoop分布式文件系统)总结
  • 【unitrix】 4.7 库数字取反(not.rs)
  • 组织策略性陪伴顾问
  • Java后端中的并发控制:从锁机制到无锁编程的实现
  • 供应链管理:主要生产计划类型及其相关信息
  • Vue-14-前端框架Vue之应用基础嵌套路由和路由传参
  • 【fish-speech】新模型openaudio-s1-mini尝鲜
  • 【windows处理技巧】如何缩小PDF
  • R语言机器学习算法实战系列(二十六)基于tidymodels的XGBoost二分类器全流程实战
  • 【力扣 困难 C】32. 最长有效括号
  • 数据结构进阶 - 第三章 栈与队列
  • ubuntu 下cursor的安装
  • 深入了解 AWS EventBridge
  • 多相机人脸扫描设备如何助力高效打造数字教育孪生体?