API Platform Elasticsearch集成文档过时问题求助
API Platform 结合 Elasticsearch 实践中的问题
我正尝试遵循API Platform官方文档,仅用Elasticsearch存储数据而非数据库。已知API Platform支持Elasticsearch读取能力,但实际操作中需要对文档内容做大量调整才能正常运行。
环境版本信息
composer.json 依赖
"require": { "php": ">=8.2", "api-platform/core": "^3.2", "doctrine/dbal": "^3", "doctrine/doctrine-bundle": "^2.12", "doctrine/doctrine-fixtures-bundle": "^3.5", "doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/orm": "^2.5", "elasticsearch/elasticsearch": "^7.11" }
本地Elasticsearch版本
{ "name": "****************", "cluster_name": "elasticsearch", "cluster_uuid": "k8_akPPcRmSFZAGmm5IA_g", "version": { "number": "8.13.3", "build_flavor": "default", "build_type": "deb", "build_hash": "617f7b76c4ebcb5a7f1e70d409a99c437c896aea", "build_date": "2024-04-29T22:05:16.051731935Z", "build_snapshot": false, "lucene_version": "9.10.0", "minimum_wire_compatibility_version": "7.17.0", "minimum_index_compatibility_version": "7.0.0" }, "tagline": "You Know, for Search" }
遇到的问题
- 配置user和tweet索引定义时,Elasticsearch 8.x已不再支持
_doc类型,必须移除示例中的该键才能正常创建索引。 - 创建模型后,模型虽出现在API的OpenAPI文档中,但并未自动关联到Elasticsearch。我不得不手动修改user的
ApiResource定义,指定Elasticsearch的State Provider和索引信息:
use ApiPlatform\Elasticsearch\State\CollectionProvider; use ApiPlatform\Elasticsearch\State\ItemProvider; use ApiPlatform\Elasticsearch\State\Options; #[ApiResource( operations: [ new GetCollection(provider: CollectionProvider::class, stateOptions: new Options(index: 'user')), new Get(provider: ItemProvider::class, stateOptions: new Options(index: 'user')), ], )]
- 文档提到:
API Platform会自动禁用写入操作,序列化时会自动将蛇形命名的文档字段转换为驼峰命名的对象属性。
但该特性并未生效,我必须修改user模型定义,将属性名从$firstName改为$first_name、$lastName改为$last_name,完全匹配Elasticsearch schema的命名规则才能正常序列化/反序列化。
疑问
- 是否有开发者遵循该文档操作时,无需上述调整即可正常运行?
- 是我遗漏了某些配置,还是Elasticsearch及相关库版本更新后,文档未同步更新?
- 在将该方案应用到我自己的项目实体/索引前,还有哪些文档未提及的注意事项?
内容的提问来源于stack exchange,提问作者Jim Glenn
相关产品推荐
相关产品推荐

