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分词器实现更高效的模糊搜索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

思静鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值