技术背景介绍
Typesense是一款开源的内存搜索引擎,旨在通过将整个索引存储于RAM中提高搜索性能,并同时在磁盘上备份。它专注于提供开箱即用的开发者体验,简化了可用选项并设置了合理的默认值。此外,Typesense还支持结合属性过滤和向量查询来检索最相关的文档,使其成为一个强大的向量存储(VectorStore)解决方案。本指南将向您展示如何使用Typesense作为向量存储进行文档检索。
核心原理解析
Typesense通过内存索引实现高效的检索性能,并支持多种搜索功能,例如全文检索、属性过滤和向量查询。向量查询通过结合OpenAI Embeddings,将文档和查询转化为向量表示,以计算文本之间的相似度(通常为余弦相似度),从而找到最相关的文档。
代码实现演示
首先,我们确保安装所需的依赖库:
%pip install --upgrade --quiet typesense openapi-schema-pydantic langchain-openai langchain-community tiktoken
然后,我们导入必要的库并配置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)
配置Typesense进行文档检索:
embeddings = OpenAIEmbeddings()
# 使用Typesense进行向量存储配置
docsearch = Typesense.from_documents(
docs,
embeddings,
typesense_client_params={
"host": "localhost", # 使用 Typesense Cloud 时为 xxx.a1.typesense.net
"port": "8108", # Typesense Cloud 使用 443 端口
"protocol": "http", # Typesense Cloud 使用 https
"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用作Retriever:
# 转换为Retriever
retriever = docsearch.as_retriever()
# 使用Retriever查询
response = retriever.invoke(query)[0]
print(response)
应用场景分析
Typesense适合在需要高性能和实时搜索的场景中使用,尤其是当需要结合全文检索和向量查询功能时。在电商、知识管理和信息检索等领域,Typesense能够快速响应复杂查询,提供准确结果。
实践建议
- 初始配置:在自托管环境中确保RAM足够大以支持索引存储,并根据响应时间和吞吐量需求合理设置缓存策略。
- 安全性:确保
typesense_api_key
的安全性,尤其是在生产环境下。 - 优化查询:结合业务需求调整
chunk_size
和chunk_overlap
参数,以提高查询精度和速度。
如果遇到问题欢迎在评论区交流。
—END—