使用matchish/laravel-scout-elasticsearch时scout:import给索引加时间戳如何禁用?
原因说明
你遇到的索引自动追加时间戳是matchish/laravel-scout-elasticsearch扩展的默认设计:为了实现零停机数据导入,每次执行导入命令时会先创建带时间戳的新索引,全量数据同步完成后再自动切换别名指向新索引,旧索引保留可用于回滚,避免导入过程中影响线上查询。
禁用时间戳后缀的两种方案
方案1:全局禁用零停机索引机制
直接修改config/scout_elasticsearch.php配置文件,新增indexer配置项指定为无操作索引器即可,修改后的完整配置如下:
<?php return [ 'host' => env('ELASTICSEARCH_HOST'), // 新增以下配置行 'indexer' => \Matchish\ScoutElasticSearch\ElasticSearch\Indexer\NoopIndexer::class, 'indices' => [ 'mappings' => [ 'default' => [ 'properties' => [ 'id' => [ 'type' => 'keyword', ], ], ], 'events' => [ 'properties' => [ 'id' => [ 'type' => 'keyword' ] ] ], 'groups' => [ 'properties' => [ 'id' => [ 'type' => 'keyword' ] ] ] ], 'settings' => [ 'default' => [ 'number_of_shards' => 1, 'number_of_replicas' => 0, ], ], ], ];
配置修改完成后,再执行php artisan scout:import命令,生成的索引名就会和模型searchableAs()方法返回的名称完全一致,不会自动追加时间戳。
方案2:单次导入临时禁用,不修改全局配置
如果不需要全局禁用零停机机制,仅某一次导入需要固定索引名,可以在执行导入命令时直接指定索引名称:
php artisan scout:import "App\Models\Group" --index=groups
执行后会直接生成名为groups的固定索引,无时间戳后缀。
注意事项
禁用自动加时间戳的机制后,导入时会直接覆盖原有索引的内容,导入过程中会出现短时间的查询不可用或数据不一致,仅适合开发环境或对可用性要求不高的场景使用。
内容的提问来源于stack exchange,提问作者Jason Jozwiak
相关产品推荐
相关产品推荐

