# 引言
在现代数据密集型应用中,搜索引擎的性能和效率至关重要。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 简化了开发者的体验,为各种应用场景提供了可靠的解决方案。建议进一步阅读以下资源以深入理解向量存储和搜索引擎的实现:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---