文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

AstraDocumentStore

DataStax Astra DB 是一个基于 Apache Cassandra 的无服务器向量数据库,支持基于向量的搜索和自动伸缩。您可以将其部署在 AWS、GCP 或 Azure 上,并轻松地在这些云中的一个或多个区域进行扩展,以实现多区域可用性、低延迟数据访问、数据主权以及避免云供应商锁定。更多信息请参阅 DataStax 文档

初始化

拥有 AstraDB 账户并创建数据库后,安装astra-haystack 集成

pip install astra-haystack

从 AstraDB 的 Web UI 中的配置,您需要数据库 ID 和生成的令牌。

您还需要一个集合名称和一个命名空间。创建集合名称时,还需要设置嵌入维度和相似性度量。命名空间用于组织数据库中的数据,在 Apache Cassandra 中称为 keyspace。

然后,在 Haystack 中,初始化一个AstraDocumentStore 对象,该对象连接到 AstraDB 实例,并将文档写入其中。

我们强烈建议通过环境变量传递身份验证数据:请确保在运行以下示例之前,已填充环境变量ASTRA_DB_API_ENDPOINTASTRA_DB_APPLICATION_TOKEN

from haystack import Document
from haystack_integrations.document_stores.astra import AstraDocumentStore

document_store = AstraDocumentStore()

document_store.write_documents([
    Document(content="This is first"),
    Document(content="This is second")
    ])
print(document_store.count_documents())

支持的 Retrievers

AstraEmbeddingRetriever:一个基于嵌入的检索器,它根据提供给检索器的查询嵌入从文档存储中获取文档。

索引警告

创建 Astra DB Document Store 时,您可能会看到以下警告之一

Astra DB collection... 被检测到所有字段都开启了索引(手动创建或由该插件的旧版本创建)。这意味着每个文档中的字符串可以存储的文本量受到更严格的限制。考虑在一个新集合上重新建立索引,以便能够存储更长的文本。

Astra DB collection... 被检测到具有以下索引策略{...}。这不匹配该对象的请求索引策略{...}。特别是,每个文档中的字符串可以存储的文本量可能受到更严格的限制。考虑在一个新集合上重新建立索引,以便能够存储更长的文本。

为什么会出现此警告

该集合已存在,并且被配置为为搜索而索引所有字段,这可能是因为您之前创建了它,或者旧插件创建了它。当 Haystack 尝试创建集合时,它会应用一个针对您预期用途优化的索引策略。该策略允许您存储更长的文本,并避免索引您不会对其进行过滤的字段,这也减少了写入开销。

常见原因

  1. 您在 Haystack 之外创建了集合(例如,在 Astra UI 或使用 AstraPy 的Database.create_collection()).
  2. 您使用旧版本的插件创建了集合。

影响

这只是一个警告。您的应用程序将继续运行,除非您尝试存储非常长的文本字段。如果您这样做,Astra DB 将返回索引错误。

解决方案

  • 推荐: 如果您可以重新填充数据,请删除并重新创建集合。然后重新运行您的 Haystack 应用程序,以便它使用优化的索引策略创建集合。
  • 如果您确定不会存储非常长的文本字段,则忽略警告

其他参考资料

🧑‍🍳 食谱:在 Haystack 管道中使用 AstraDB 作为数据存储