如何使用Typesense实现高性能向量搜索

152 阅读2分钟
# 引言
在现代数据密集型应用中,搜索引擎的性能和效率至关重要。Typesense 是一个开源的内存搜索引擎,以其卓越的性能和简化的开发者体验而著称。本文将带您了解如何将 Typesense 用作向量存储,并进行高效的向量查询。

# 主要内容

## 什么是Typesense?
Typesense 是一个开源的,内存存储的搜索引擎。它通过将整个索引存储在RAM中(同时在磁盘上备份)来提供高性能搜索服务。此外,Typesense 提供了开箱即用的开发者体验,简化了可用选项并设定了合理的默认值,方便开发者快速上手。

## 安装和设置
要开始使用 Typesense,首先需要安装相关的 Python 依赖项:

```python
%pip install --upgrade --quiet typesense openapi-schema-pydantic langchain-openai langchain-community tiktoken

我们使用 OpenAI 的嵌入,所以需要获取 OpenAI API Key:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

导入数据集并进行向量化

接下来,我们需要加载和分割文档,并将其向量化:

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Typesense
from langchain_openai import OpenAIEmbeddings
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进行嵌入
embeddings = OpenAIEmbeddings()

# 配置Typesense客户端
docsearch = Typesense.from_documents(
    docs,
    embeddings,
    typesense_client_params={
        "host": "localhost",  # 使用xxx.a1.typesense.net替代自托管
        "port": "8108",  # 云服务使用443
        "protocol": "http",  # 云服务使用https
        "typesense_api_key": "xyz",
        "typesense_collection_name": "lang-chain",
    },
)

代码示例

以下是完整的示例代码,展示如何使用 Typesense 进行相似度查询:

# 使用API代理服务提高访问稳定性
query = "What did the president say about Ketanji Brown Jackson"
found_docs = docsearch.similarity_search(query)

print(found_docs[0].page_content)

Typesense 可以使用余弦相似性作为 LangChain 的检索器:

retriever = docsearch.as_retriever()

query = "What did the president say about Ketanji Brown Jackson"
retrieved_doc = retriever.invoke(query)[0]
print(retrieved_doc)

常见问题和解决方案

网络限制问题

由于有些地区的网络限制,无法直接访问 Typesense 的云服务,开发者可以使用 API 代理服务或自托管以提高访问稳定性。

配置问题

务必确保在配置 Typesense 客户端时使用正确的主机、端口和协议,尤其是在 Typesense Cloud 上运行时。

总结和进一步学习资源

通过本文,您已经了解了如何使用 Typesense 实现高性能的向量搜索。Typesense 简化了开发者的体验,为各种应用场景提供了可靠的解决方案。建议进一步阅读以下资源以深入理解向量存储和搜索引擎的实现:

参考资料

  1. Typesense GitHub Repository
  2. LangChain Documentation
  3. OpenAI API Documentation

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

---END---