资讯详情

资讯详情

Feast Elasticsearch Online Store:面向向量检索与在线特征服务的完整实战指南

Feast Elasticsearch Online Store面向向量检索与在线特征服务的完整实战指南【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast本文以 Feast 官方参考文档 docs/reference/online-stores/elasticsearch.md 为骨架结合仓库中 elasticsearch.py 的源码实现系统讲解 Feast 如何将表格型特征与 Embedding 向量物化到 Elasticsearch 索引中并利用 dense vector 完成在线特征读取与相似度检索。读完本文你将掌握 Elasticsearch online store 的安装、配置、索引映射、读写原理、向量检索 API 与功能边界可直接用于构建 RAG 或语义检索类在线服务。一、Elasticsearch online store 是什么Elasticsearch online store 是 Feast 在线存储家族的一员它把物化materialization结果写入 Elasticsearch 索引用于在线特征服务。它的两个核心能力是表格型特征值的物化与读取批量特征值标量、字符串、列表等被编码后写入索引供online_read按实体键实时读取Embedding 向量的物化与相似度检索向量特征以dense vector稠密向量形式存储可基于余弦相似度、点积、L2 距离执行 Top-K 最近邻检索支撑文档检索、语义召回等场景。该实现位于 sdk/python/feast/infra/online_stores/elasticsearch_online_store/elasticsearch.py核心类是ElasticSearchOnlineStore实现OnlineStore接口与ElasticSearchOnlineStoreConfig配置类向量相关配置继承自 vector_store.py 中的VectorStoreConfig。二、快速开始1. 安装依赖pip install feast[elasticsearch]该 extra 会拉取 Feast 及 Elasticsearch 官方客户端。以当前仓库的 CI 依赖锁定文件为例elasticsearch客户端版本被锁定为elasticsearch9.4.1见 sdk/python/requirements/py3.10-ci-requirements.txt。2. 初始化特征仓库feast init -t elasticsearch该命令会生成一个预置online_store.type: elasticsearch的模板特征仓库可直接在其上定义 Feature View 并执行feast apply与物化。三、feature_store.yaml 配置详解官方文档给出的最小配置如下project: my_feature_repo registry: data/registry.db provider: local online_store: type: elasticsearch host: ES_HOST port: ES_PORT user: ES_USERNAME password: ES_PASSWORD write_batch_size: 1000结合 ElasticSearchOnlineStoreConfig 与VectorStoreConfig的源码定义完整的可配置项与默认值如下配置项类型默认值说明typestrelasticsearch声明 online store 类型必须保持该值hoststrlocalhostElasticsearch 主机地址portint9200Elasticsearch HTTP 端口默认端口来自_get_client的兜底逻辑user/passwordstr空字符串基础认证凭据通过basic_auth传入客户端未配置时按空字符串处理schemestrhttp连接协议生产环境可设为httpsindexstrNone索引名配置项需要注意当前实现中索引名实际由 Feature View 名称table.name决定vector_field_pathstrembedding.vector_valuedense vector 字段在文档中的路径相似度检索脚本按此路径读取向量write_batch_sizeint40批量写入的行数online_write_batch按此值切片调用helpers.bulkenable_openai_compatible_storeboolFalse置为true时索引映射额外增加value_numdouble字段支持数值范围过滤vector_enabledboolFalse是否启用向量相似度检索调用retrieve_online_documents_v2前必须设为true否则源码会抛出ValueErrorsimilaritystrcosine向量相似度度量用于索引映射中的similarity字段与检索脚本选择因此若要同时使用在线特征读取与向量检索推荐的完整配置为project: my_feature_repo registry: data/registry.db provider: local online_store: type: elasticsearch host: ES_HOST port: ES_PORT scheme: https user: ES_USERNAME password: ES_PASSWORD index: feast_online write_batch_size: 1000 vector_enabled: true similarity: cosine注意similarity支持cosine、dot_product、l2l2_norm/euclidean该值同时决定了索引建立时的向量索引类型因此应在建索引前确定避免后期不匹配。四、底层实现数据如何写入与读取1. 客户端创建_get_clientelasticsearch.py使用配置组装Elasticsearch客户端host缺省为localhostport缺省为9200scheme缺省为http并以(user, password)作为basic_auth。客户端以类属性缓存进程内复用。2. 批量写入online_write_batch写入流程online_write_batch大致如下将实体键通过serialize_entity_key序列化后做Base64 编码作为entity_key字段每个特征值通过_encode_feature_value编码为对象feature_value保存序列化后的ValueProto的 Base64 字符串字符串/数值特征额外写入value_text便于检索列表向量特征写入vector_valueJSON 数组以{entity_key}_{timestamp}作为文档_id保证同一实体同一时间戳的数据落为同一文档按write_batch_size分批调用helpers.bulk并使用refreshwait_for等待索引刷新确保写入后立即可读。时间戳统一通过to_naive_utc转换为 UTC 无时区时间。若索引映射中存在value_num字段见下文 OpenAI 兼容模式数值特征还会额外写入value_num供数值范围过滤使用。3. 在线读取online_readonline_read 将请求的实体键同样 Base64 编码后构造如下 Query DSL{ _source: {includes: [timestamp, created_ts, entity_key, ...请求的特征字段], excludes: [*.vector_value]}, query: { bool: {filter: [{terms: {entity_key: [Base64 编码的实体键, ...]}}]} } }读取时默认排除向量字段*.vector_value避免大体积向量拖慢普通特征读取返回的特征值通过_to_value_proto反序列化为ValueProto。时间戳按%Y-%m-%dT%H:%M:%S格式解析。4. 基础设施管理update 与 teardownupdate源码对要删除的 Feature View 执行delete_by_query清空索引对保留的 Feature View 调用create_index补建索引teardown源码按 Feature View 名称逐个indices.delete删除索引。从源码结构看当前实现不提供基础设施变更计划plan这一点也反映在下方功能矩阵中。五、索引映射dense vector 的存储结构官方文档给出的索引映射如下与 create_index 的实现一致{ dynamic_templates: [ { feature_objects: { match_mapping_type: object, match: *, mapping: { type: object, properties: { feature_value: {type: binary}, value_text: {type: text}, vector_value: { type: dense_vector, dims: vector_field_length, index: True, similarity: config.online_store.similarity } } } } } ], properties: { entity_key: {type: keyword}, timestamp: {type: date}, created_ts: {type: date} } }源码层面的补充细节dims向量维度来自_get_feature_view_vector_field_metadata(table)默认兜底为512实际应以 Feature View 中定义的向量字段长度为准vector_value同时声明了index: True与similarity即启用 ANN 向量索引并按配置的度量建索引当配置enable_openai_compatible_store: true时feature_properties会额外追加value_num: {type: double}用于数值型特征的精确范围过滤_encode_feature_value中include_value_numTrue时写入文档指出这些 API 与映射在未来的 Feast 版本中可能会调整以提升性能与易用性属于内部实现细节不应作为对外稳定契约依赖。六、功能矩阵官方文档为 Elasticsearch online store 给出了如下功能矩阵原文档表格列头笔误写为 Postgres按内容应为 Elasticsearch功能项Elasticsearchwrite feature values to the online storeyesread feature values from the online storeyesupdate infrastructure (e.g. tables) in the online storeyesteardown infrastructure (e.g. tables) in the online storeyesgenerate a plan of infrastructure changesnosupport for on-demand transformsyesreadable by Python SDKyesreadable by Javanoreadable by Gonosupport for entityless feature viewsyessupport for concurrent writing to the same keynosupport for ttl (time to live) at retrievalnosupport for deleting expired datanocollocated by feature viewyescollocated by feature servicenocollocated by entity keyno要点解读数据按Feature View 组织collocated by feature view即一个 Feature View 对应一个 Elasticsearch 索引不支持 TTL 与过期数据删除需要自行管理索引生命周期同一实体键的并发写入不受保护不适合高并发同键覆盖场景目前仅 Python SDK 可读Java / Go 服务端尚不支持该 online store。与其他 online store 的横向对比可参考完整的功能矩阵以及 README。七、检索在线文档向量retrieve_online_documents_v2官方文档给出的向量检索示例from feast import FeatureStore feature_store FeatureStore(repo_pathfeature_store.yaml) query_vector [1.0, 2.0, 3.0, 4.0, 5.0] top_k 5 # Retrieve the top k closest features to the query vector feature_values feature_store.retrieve_online_documents_v2( features[my_feature], queryquery_vector, top_ktop_k, )结合 feature_store.py 与 elasticsearch.py 的实现使用时有几点必须注意前置条件feature_store.yaml中online_store.vector_enabled必须为true否则实现层直接抛出ValueError(Vector search is not enabled in the online store config)特征引用格式features中字符串特征引用须符合feature_view:feature格式如documents:embedding且一次检索只支持单个 Feature View跨多个 Feature View 会报错支持向量查询与文本查询两种模式纯向量query[...]浮点列表构建script_score查询纯文本query_string...走 Elasticsearchquery_string全文匹配混合模式同时传query与query_string向量相似度脚本会叠加文本must条件。相似度度量实现层将distance_metric缺省为 FeatureStore 层的L2最终取distance_metric or config.online_store.similarity映射为检索脚本similarity使用的 ES 脚本cosinecosineSimilarity(params.query_vector, 向量字段) 1.0dot_productdotProduct(params.query_vector, 向量字段)l2/l2_norm/euclidean1 / (1 l2norm(params.query_vector, 向量字段))不支持的度量会抛出ValueError。向量字段路径由vector_field_path配置决定默认embedding.vector_value。过滤支持可通过filters参数传入ComparisonFilter/CompoundFilter由ElasticsearchFilterTranslator源码翻译为term/terms/range/bool must_not等 Query DSL 子句。需特别留意数值范围过滤gt/gte/lt/lte要求索引存在value_num字段否则数值以文本形式存储范围比较会退化为字典序比较如9 100若检测到数值过滤但索引缺少value_num实现会打印告警建议设置enable_openai_compatible_store: true后teardown并重新apply以重建索引返回结果每条命中的文档包含timestamp、反序列化后的实体键以及特征字典。特征字典中始终包含distance即_score纯文本检索时额外包含text_rank同时会把实体键的 join keys 一并放入结果。一个带过滤与显式度量的完整示例from feast import FeatureStore from feast.filter_models import ComparisonFilter feature_store FeatureStore(repo_pathfeature_store.yaml) results feature_store.retrieve_online_documents_v2( features[documents:embedding, documents:title], query[0.1, 0.2, 0.3, 0.4, 0.5], top_k5, distance_metriccosine, filtersComparisonFilter(keydocuments:category, typeeq, valuenews), )八、工程实践测试与验证方式仓库通过 Testcontainers 对 Elasticsearch online store 做集成测试测试创建器见 sdk/python/tests/universal/feature_repos/universal/online_store/elasticsearch.py启动elasticsearch:8.18.0官方镜像容器并暴露 9200 端口构造{host: localhost, type: elasticsearch, port: 暴露端口, vector_length: 2, similarity: cosine}作为在线存储配置测试结束后停止容器。测试注册配置位于 elasticsearch_repo_configuration.py将其加入FULL_REPO_CONFIGS后即可跑通用在线存储集成测试套件。在本地没有 Elasticsearch 集群时这是复现与验证读写行为最便捷的方式。九、总结与使用建议Feast Elasticsearch online store 的价值在于把「特征平台」与「向量检索」统一到同一套在线存储之上标量特征用于常规在线推理Embedding 向量用于相似度召回两者共享同一 Feature View 生命周期与物化链路。实际落地时建议明确vector_enabled: true并提前确定similarity度量与向量维度避免索引重建需要数值范围过滤时开启enable_openai_compatible_store并在变更后重建索引关注功能矩阵中的「不支持」项TTL、并发同键写入、Java/Go 读取必要时搭配其他存储做补偿索引映射与检索 API 属于演进中的内部实现源码中create_index亦标注了后续可能开放自定义升级 Feast 版本时应回归验证。如果你正在构建基于 Feast 的 RAG 或语义检索在线服务可进一步参考仓库中的 alpha-vector-database.md 以及 examples/rag 示例来搭建完整的向量特征仓库。【免费下载链接】feastThe Open Source Feature Store for AI/ML项目地址: https://gitcode.com/GitHub_Trending/fe/feast创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →