引言
Elasticsearch是一款强大的分布式搜索和分析引擎,广泛用于处理各种数据搜索和分析需求。从全文检索到复杂的分析,Elasticsearch都能胜任。在本文中,我们将聚焦于Elasticsearch的矢量存储功能,并探讨如何通过LangChain与Elasticsearch集成,实现高效的文本检索。
主要内容
安装与配置
在使用Elasticsearch的矢量搜索功能之前,需要安装langchain-elasticsearch包。以下是安装指令:
%pip install -qU langchain-elasticsearch
Elasticsearch有两种主要的部署方式:通过Elastic Cloud使用托管服务或在本地安装。为了简单起见,我们建议使用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
初始化与使用
要使用Elasticsearch的矢量存储,先需要初始化ElasticsearchStore。下面的例子展示了如何在本地配置:
from langchain_elasticsearch import ElasticsearchStore
vector_store = ElasticsearchStore(
es_url="http://localhost:9200", # 使用API代理服务提高访问稳定性
index_name="langchain_index",
embedding=embeddings,
es_user="elastic",
es_password="changeme",
)
添加与查询文档
您可以使用Document类来表示文档,然后将其添加到矢量存储中:
from langchain_core.documents import Document
from uuid import uuid4
documents = [
Document(page_content="Example content", metadata={"source": "tweet"})
# 更多文档...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
在添加文档后,可以进行相似性搜索:
results = vector_store.similarity_search(
query="Some query text",
k=2,
filter=[{"term": {"metadata.source.keyword": "tweet"}}],
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
问题:在将文档索引到Elasticsearch时遇到超时错误
解决方案:可以调整chunk_size和max_chunk_bytes参数以减少超时错误的可能性:
vector_store.add_texts(
texts,
bulk_kwargs={
"chunk_size": 50,
"max_chunk_bytes": 200000000
}
)
总结和进一步学习资源
本文介绍了如何使用Elasticsearch的矢量存储功能,并通过LangChain进行集成和查询。了解更多关于向量存储和检索增强生成(RAG)的内容,可以参阅:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---