Elasticsearch(ES)是一款基于 Lucene 的分布式搜索引擎,可以快速地存储、搜索和分析大量的数据。ES 以其高性能、可扩展性和丰富的功能使得它广泛应用于各种领域,如企业搜索、日志分析、安全分析、商业智能、向量检索等。腾讯云大数据 Elasticsearch Service 是云端全托管 Elastic Stack 服务,集成 X-Pack 特性,并独有腾讯自研优化的内核特性。近期首发上线的 ES 8.8.1版本,集成了 HNSW 算法来提高向量检索的计算速度,经过我们调优后,支持高达十亿级向量检索。本文旨在介绍如何使用集文本搜索、向量检索和 AI 能力于一身的 ES 8.8.1,为您带来搜索与分析全新的前沿体验。
总体架构
ES 8.8.1 提供的是一个从自然语言处理,到向量化,再到向量搜索,并能与大模型集成的端到端的搜索与分析平台。跟 ES 7 相比,ES 8.8.1 引入了 HNSW 算法来给向量建立图索引,并且集成到 Lucene 的工作方式(倒排索引,BKD 树,缓存等)来优化检索性能。所以,ES 8.8.1 的向量搜索可以跟任何 ES 支持的任意查询相结合,并与聚合、文档级安全性、字段级安全性、索引排序等兼容,并同时兼具良好的性能体验。
总体流程简介如下:
向量化数据:用户可以上传提前训练好的自定义大数据模型,如词嵌入模型(Word Embeddings)或深度学习模型(如 BERT),让 ES 做实时的读写 Embedding。业务也可以直接将向量数据上报到 ES。
索引向量数据:将向量化的数据存储到 ES 中。在索引过程中,将向量数据分布式地存储在多个节点上,以提高数据的可靠性和可扩展性。
发起向量检索请求:通过使用 ES 的搜索 API,发起向量检索请求。在请求中,需要指定待检索的向量以及其他相关参数,如调用模型、相似度算法、返回结果数量等。
执行向量检索:ES 使用倒排索引来加速向量检索,快速定位包含特定向量的文档。在向量检索过程中, ES 会根据查询向量的特征,通过倒排索引匹配相似的向量。一旦匹配到倒排索引中的文档, ES 会计算查询向量与匹配文档向量之间的相似度。常用的相似度计算方法包括余弦相似度、欧几里得距离等。
返回检索结果:根据相似度计算的结果, ES 会返回与查询向量最相似的文档或结果。可以根据需求设置返回结果的数量和排序方式。同时,在召回后,可选择将 TOP 结果传入LLM大语言模型(如混元、GPT)等,对信息进行对话式结果整合,最终返回给用户,实现对话式搜索。
用户在性能压测过程中,遇到了压测负载上不去,负载不均等问题,我们通过对分片数、分发等 ES 查询参数进行调优,解决了这些问题。
5. 召回率测试。
我们基于不同ef_construction 参数,跟暴力计算相对比来计算召回率,结果如下。
efConstruction
100
200
500
top100 召回率
>=96%
=100%
=100%
top200 召回率
>=94.5%
>99.9%
=100%
top500 召回率
>=90%
>=99.2%
>99%
总结
腾讯云大数据 Elasticsearch Service 近期首发上线的ES 8.8.1版本,提供了强大的云端 AI 增强与向量检索能力,支持在端到端搜索与分析平台中实现自然语言处理、向量搜索以及与大模型的集成,10亿级向量检索平均响应延迟控制在毫秒级,助力客户实现由 AI 驱动的高级搜索能力,为搜索与分析带来全新的前沿体验。