在当今信息爆炸的时代,高效且快速的文本检索变得越来越重要。Typesense是一款开源内存搜索引擎,它不仅支持传统的键值查询,还提供了将属性过滤与向量查询相结合的能力,这使得它在进行高级文本搜索时表现得尤为出色。本文将通过实践示例,介绍如何使用Typesense作为向量存储库进行文本搜索。
技术背景介绍
Typesense专注于性能优化,通过将整个索引存储在RAM中,实现快速的查询响应。这种内存存储的方式提供了出色的读写性能,并通过磁盘备份确保数据安全。此外,Typesense提供了开箱即用的开发者体验,简化了可用选项和良好的默认设置。
核心原理解析
Typesense的核心优势在于它对性能的优化以及支持结合属性过滤和向量查询的能力。通过支持向量相似度查询,Typesense可以从大规模文本数据集中快速找到最相关的文档。本文将展示如何结合OpenAI的向量嵌入技术,以实现高效的文本检索。
代码实现演示(重点)
以下是一个完整的示例代码,演示如何使用Typesense进行文本检索:
%pip install --upgrade --quiet typesense openapi-schema-pydantic langchain-openai langchain-community tiktoken
import openai
import os
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Typesense
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 获取OpenAI API Key并设置环境变量
os.environ["OPENAI_API_KEY"] = 'your-api-key'
# 加载数据集
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", # 使用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 = docsearch.as_retriever()
retrieved_doc = retriever.invoke(query)[0]
print(retrieved_doc)
应用场景分析
Typesense非常适合在需要快速检索和高吞吐量的场景中使用,如搜索引擎、推荐系统、文本分类等场景。此外,结合向量查询的能力,Typesense也可以用于自然语言处理领域中的高级应用。
实践建议
- 在大规模数据集上使用Typesense时,推荐使用Typesense Cloud以获得最佳性能和可用性。
- 确保在生产环境中使用HTTPS协议以保障数据传输的安全性。
- 在进行向量查询时,根据实际需求调整文本分割的粒度和索引参数,以达到最佳的查询效果。
如果遇到问题欢迎在评论区交流。
—END—