用于大规模数据集搜索的Aerospike Vector Search:快速上手指南

# 用于大规模数据集搜索的Aerospike Vector Search:快速上手指南

## 引言
Aerospike Vector Search (AVS) 是Aerospike数据库的扩展,旨在对存储在Aerospike中的大规模数据集进行高效搜索。这项新服务通过建立索引来执行搜索,提供了强大的语义搜索能力。本篇文章将介绍如何利用LangChain和Aerospike的VectorStore集成来进行向量搜索。

## 主要内容

### 1. 安装AVS
在使用之前,需要确保有一个正在运行的AVS实例。完成安装后,记下AVS实例的IP地址和端口:
```python
PROXIMUS_HOST = "<avs-ip>"  # 示例API代理服务
PROXIMUS_PORT = 5000

2. 安装依赖

安装必要的库,可能需要几分钟时间:

!pip install --upgrade --quiet aerospike-vector-search==0.6.1 langchain-community sentence-transformers langchain

3. 下载数据集

下载大约10万条语录的数据集,并提取其中部分进行使用:

!wget https://github.com/aerospike/aerospike-vector-search-examples/raw/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz

4. 加载数据集

将语录数据加载成文档,以便进行语义搜索:

import itertools
import os
import tarfile
from langchain_community.document_loaders.csv_loader import CSVLoader

filename = "./quotes.csv"

if not os.path.exists(filename) and os.path.exists(filename + ".tgz"):
    # 解压文件
    with tarfile.open(filename + ".tgz", "r:gz") as tar:
        tar.extractall(path=os.path.dirname(filename))

NUM_QUOTES = 5000
documents = CSVLoader(filename, metadata_columns=["author", "category"]).lazy_load()
documents = list(itertools.islice(documents, NUM_QUOTES))

5. 创建嵌入器

利用HuggingFaceEmbeddings将文档嵌入以便进行向量搜索:

from aerospike_vector_search.types import VectorDistanceMetric
from langchain_community.embeddings import HuggingFaceEmbeddings

MODEL_DIM = 384
MODEL_DISTANCE_CALC = VectorDistanceMetric.COSINE
embedder = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

6. 创建Aerospike索引并嵌入文档

在添加文档前,需要在Aerospike数据库中创建索引:

from aerospike_vector_search import AdminClient, Client, HostPort
from langchain_community.vectorstores import Aerospike

seed = HostPort(host=PROXIMUS_HOST, port=PROXIMUS_PORT)

NAMESPACE = "test"
INDEX_NAME = "quote-miniLM-L6-v2"
VECTOR_KEY = "vector"

client = Client(seeds=seed)
admin_client = AdminClient(seeds=seed)
index_exists = False

for index in admin_client.index_list():
    if index["id"]["namespace"] == NAMESPACE and index["id"]["name"] == INDEX_NAME:
        index_exists = True
        break

if not index_exists:
    admin_client.index_create(
        namespace=NAMESPACE,
        name=INDEX_NAME,
        vector_field=VECTOR_KEY,
        vector_distance_metric=MODEL_DISTANCE_CALC,
        dimensions=MODEL_DIM,
        index_meta_data={"model": "miniLM-L6-v2"}
    )

admin_client.close()

docstore = Aerospike.from_documents(
    documents,
    embedder,
    client=client,
    namespace=NAMESPACE,
    vector_key=VECTOR_KEY,
    index_name=INDEX_NAME,
    distance_strategy=MODEL_DISTANCE_CALC
)

7. 搜索文档

利用向量搜索语句:

query = "A quote about the beauty of the cosmos"
docs = docstore.similarity_search(
    query, k=5, index_name=INDEX_NAME, metadata_keys=["_id", "author"]
)

def print_documents(docs):
    for doc in docs:
        print(doc.metadata["author"], ":", doc.page_content)

print_documents(docs)

常见问题和解决方案

  • 网络访问问题:由于某些地区的网络限制,开发者可能需要使用API代理服务以增加访问稳定性。
  • 性能优化:大数据量时,可考虑分批处理或异步加载以提升效率。

总结和进一步学习资源

通过AVS进行向量搜索可以极大地提升大规模数据集的语义搜索能力。推荐资源:

参考资料

  • Aerospike 官方文档
  • LangChain 官方文档
  • Hugging Face Transformers 文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值