通过 AstraDB/Cassandra 实现向量搜索-通过最少的代码进行理解

首先

是什麼?

本文的目的是什麼?

你是否了解向量搜索?

在这篇文章中,我们假设读者已经对”向量搜索”有一定了解,并旨在介绍一种新的执行该操作的方法。我们希望能够简洁明了地传达给技术人员所需的实质性信息,以帮助他们建立一个具体的概念。

请将以下内容用中文进行重述,只需要一个选项:假设读者已经有对Cassandra和AstraDB的基本理解。

通過閱讀這篇文章:

    • ベクトル検索の実行について、他のテクノロジーでの経験のある人は、新しい実行手段として、イメージを持つことができるでしょう。

 

    • CassandraとPythonライブラリについての知識があれば、何がおこなわれているか、さらに具体的に理解できるでしょう。

 

    AstraDBについての知識、あるいは関心があれば、実際にAstraDBを使って、ベクトル検索を実行することも難しくないでしょう。

介绍(2023年6月)

Apache Caddandre:CEP-30:通过存储附属索引进行近似最近邻(ANN)向量搜索。

 

image.png

状态已更改为“已采纳”。

AstraDB 阿斯特拉数据库

以上的功能可以用作预览。

image.png

点击上述按钮创建新的数据库,将生成一个预览模式的数据库,并在概览页面中显示Vector Search文档的链接,如下所示。

image.png

 

实践

基本的流程

    1. 将值向量化

 

    1. 执行数据集的注册和索引化

 

    执行向量搜索

将值进行向量化

在这里,我们使用SentenceTransformers的MiniLM。

 

!pip sentence-transformers
from sentence_transformers import SentenceTransformer
transformer = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embedding = transformer.encode(text).tolist()

注册和索引化数据集

数据表定义

存储向量数据的表定义。

session.execute(f"""CREATE TABLE IF NOT EXISTS vector_preview.products_table
(product_id int,
 chunk_id int,
 
 product_name text,
 description text,
 price text,
 
 description_embedding vector<float, 384>,
 
 PRIMARY KEY (product_id, chunk_id))""")

指标定义

创建索引。

session.execute(f"""CREATE CUSTOM INDEX IF NOT EXISTS minilm_desc ON vector_preview.products_table (description_embedding) USING 'org.apache.cassandra.index.sai.StorageAttachedIndex'""")

数据录入

query = SimpleStatement(
                f"""
                INSERT INTO vector_preview.products_table
                (product_id, chunk_id, product_name, description, price, description_embedding)
                VALUES (%s, %s, %s, %s, %s, %s)
                """
            )
    display(row)

    session.execute(query, (product_id, chunk_id, product_name, description, pricevalue, embedding))

执行向量搜索

query = SimpleStatement(
    f"""
    SELECT *
    FROM demo.products_table
    ORDER BY description_embedding ANN OF {embedding} LIMIT 5;
    """
    )
results = session.execute(query)
top_5_products = results._current_rows

for row in top_5_products:
  print(f"""{row.product_id}, {row.product_name}, {row.description}, {row.price}\n""")

最后

本篇文章的撰写主要是为了整理我自己的理解,但是我意识到可能有很多人会认为解释不够友善。然而,正如我在开头整理的那样,如果我们能够建立起前提,我希望内容传达得更加简洁明了。

补充(2023年7月19日)

AstraDB 的向量搜索功能已经正式推出。

2023年7月18日,我们在上述中介绍的AstraDB的向量搜索功能已经转为正式可用,并可在生产环境中使用。

示例/教程

在下方的GitHub存储库中,我们公开了可以验证其运行情况的样本/教程(解释和评论提供了英语和日语),该样本/教程是Apache Cassandra的向量搜索扩展功能,仅介绍了其精华。

 

广告
将在 10 秒后关闭
bannerAds