温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

elasticsearch怎么实现自动补全

发布时间:2026-10-07 12:22:44 来源:亿速云 阅读:103 作者:小樊 栏目:软件技术

在 Elasticsearch 中实现自动补全(Auto Complete / Suggest),常见有三种主流方案,按使用频率和推荐程度排序如下:


一、使用 completion 类型(官方推荐,性能最好)✅

1. 原理

  • 使用 Completion Suggester
  • 基于 FST(有限状态机),内存常驻,查询极快
  • 适合“搜索框实时补全”

2. Mapping 示例

PUT /goods
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "suggest": {
        "type": "completion"
      }
    }
  }
}

3. 写入数据

POST /goods/_doc/1
{
  "title": "iPhone 15 Pro",
  "suggest": {
    "input": ["iPhone 15", "iPhone 15 Pro", "苹果手机"]
  }
}

4. 查询自动补全

POST /goods/_search
{
  "suggest": {
    "my-suggest": {
      "prefix": "iph",
      "completion": {
        "field": "suggest"
      }
    }
  }
}

✅ 优点:

  • 毫秒级
  • 支持前缀匹配
  • 适合高并发搜索框

❌ 缺点:

  • 不支持模糊、正则
  • 不支持中间匹配(只能前缀)

二、使用 edge_ngram(适合中文 & 通用搜索)✅✅

1. 原理

  • 在写入时把词拆成前缀
  • 用 match 查询即可

2. Mapping 示例

PUT /articles
{
  "settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20,
          "token_chars": ["letter", "digit"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete"
      }
    }
  }
}

3. 查询

GET /articles/_search
{
  "query": {
    "match": {
      "title": "iph"
    }
  }
}

✅ 优点:

  • 支持中文
  • 实现简单
  • 可结合排序、过滤

❌ 缺点:

  • 索引体积更大
  • 性能略低于 completion

三、使用 search_as_you_type(ES 7+ 推荐)✅✅✅

1. 原理

  • ES 原生“边打字边搜”
  • 内部自动处理 n-gram

2. Mapping

PUT /products
{
  "mappings": {
    "properties": {
      "name": {
        "type": "search_as_you_type"
      }
    }
  }
}

3. 查询

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "iph",
      "type": "bool_prefix",
      "fields": ["name", "name._2gram", "name._3gram"]
    }
  }
}

✅ 优点:

  • 官方推荐
  • 支持中英文
  • 使用简单

四、方案对比总结

方案 速度 中文 复杂度 推荐场景
completion ⭐⭐⭐⭐⭐ ❌ 中 搜索框前缀补全
edge_ngram ⭐⭐⭐⭐ ✅ 中 通用补全
search_as_you_type ⭐⭐⭐⭐ ✅ 低 新项目首选

五、实际项目建议

  • 电商搜索框:completion + 热词
  • 中文内容站:search_as_you_type
  • 复杂业务:edge_ngram + 业务排序

如果你愿意,可以告诉我:

  • ES 版本
  • 中文还是英文
  • 是否是搜索框场景

我可以给你一套可直接用的完整示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手