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_ENDPOINT 和ASTRA_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 尝试创建集合时,它会应用一个针对您预期用途优化的索引策略。该策略允许您存储更长的文本,并避免索引您不会对其进行过滤的字段,这也减少了写入开销。
常见原因
- 您在 Haystack 之外创建了集合(例如,在 Astra UI 或使用 AstraPy 的
Database.create_collection()). - 您使用旧版本的插件创建了集合。
影响
这只是一个警告。您的应用程序将继续运行,除非您尝试存储非常长的文本字段。如果您这样做,Astra DB 将返回索引错误。
解决方案
- 推荐: 如果您可以重新填充数据,请删除并重新创建集合。然后重新运行您的 Haystack 应用程序,以便它使用优化的索引策略创建集合。
- 如果您确定不会存储非常长的文本字段,则忽略警告。
其他参考资料
更新于 大约 2 个月前
