
点击蓝字关注我们
Elasticsearch 提供了语义搜索功能,允许用户通过自然语言查询并检索相关信息。为了实现这一功能,目标文档和查询首先需要通过嵌入过程转换为向量表示,这一过程由运行在 Elasticsearch 内部或外部的机器学习(ML)模型处理。
稀疏向量与密集向量的区别
密集向量
密集向量是固定维度的向量,每个元素都是一个数值(默认为浮点数)。大多数元素都是非零值,表示文本的某些特征,但这些特征的含义通常不易被人理解。
[0.13586345314979553, -0.6291824579238892, 0.32779985666275024, 0.36690405011177063, ...]
稀疏向量
稀疏向量主要由零值组成,只有少数非零值。它们通常以键值对的形式存储,每个键(特征)通常对应一个有意义的术语或概念。
{"你好":1.2,"ES":0.3,…}
稀疏向量的优势
零样本学习
稀疏向量(如 ELSER 生成的)可以很好地泛化到新领域,而无需大量微调。与密集向量模型不同,稀疏向量依赖于基于术语的表示,使其在零样本检索中更有效。
资源效率
稀疏向量比密集向量更节省资源。由于它们主要包含零值,并且只存储非零值作为键值对,因此需要更少的内存和存储空间。
在 Elasticsearch 中使用稀疏向量
从 Elasticsearch 8.17 开始,您可以使用 Hugging Face 的稀疏向量模型。以下是实现步骤:
1. 找到稀疏向量模型
在 Hugging Face 上浏览适合您用例的稀疏嵌入模型,确保模型使用支持的标记化方法。
2. 将模型上传到 Elasticsearch
使用 Eland 的 CLI 工具将模型导入 Elasticsearch。
eland_import_hub_model --url "your.elasticsearch.host" --es-api-key "your_api_key" --hub-model-id naver/splade-v3-distilbert --task-type text_expansion --start
3. 定义索引映射
创建一个包含 sparse_vector 字段的索引。
PUT sparse-test{"mappings": {"properties": {"content_embedding": {"type": "sparse_vector"},"content": {"type": "text"}}}}
4. 创建摄取管道
使用推理处理器创建摄取管道,将文本信息嵌入到稀疏向量中。
PUT _ingest/pipeline/sparse-test-pipeline{"processors": [{"inference": {"model_id": "naver__splade-v3-distilbert","input_output": [{"input_field": "content","output_field": "content_embedding"}]}}]}
5. 使用管道摄取数据
将文本数据摄取到索引中,内容将自动嵌入为稀疏向量表示。
POST sparse-test/_doc/1?pipeline=sparse-test-pipeline{"content": "Elasticsearch provides a semantic search feature that allows users to query in natural language and retrieve relevant information."}
结论
稀疏向量为 Elasticsearch 提供了强大且高效的搜索能力。与密集向量相比,稀疏向量在零样本性能和资源效率方面具有显著优势。从 Elasticsearch 8.17 开始,用户可以根据具体需求选择密集或稀疏向量模型,探索语义搜索的新可能性。
通过稀疏向量,Elasticsearch 的语义搜索功能将更加强大和灵活,帮助用户更高效地处理复杂查询。
关于公司
感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。
欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!
![]() | ![]() |
Elastic 微信群 | EDB 微信群 |

发现“分享”和“赞”了吗,戳我看看吧






