我想填充一个索引,但只有在完成后才能进行搜索。弹性搜索有标准的方法吗?我想我可以设置"index.blocks.read": true
,但我想要一种方法,能够请求一个可搜索索引列表的弹性,我不知道如何使用这个设置。另外,关闭/打开索引感觉有点麻烦。
我发现的一个解决方案是为每个索引添加一个文档,定义该索引的状态。尽管查询索引列表有点烦人。特别是因为查询和分页包含2,000个索引状态文档的长列表是有问题的。滚动扫描是一种解决方案,因为它一次给了我所有的结果(因为每个分片最多有1个索引状态文档)。虽然这感觉就像我使用错误的工具的工作(即一个滚动扫描op,总是做一个滚动)。
我不想要一个文档引用所有的索引,因为那样我就不得不手动垃圾收集它与垃圾收集索引。但也许这是最好的权衡…
有我不知道的标准做法吗?
使用别名如何?而不是直接查询索引,您的应用程序可以查询别名(例如live
)。只要你的索引还没有准备好(即仍在填充),你不分配live
别名给它,因此索引将无法搜索。
基本上,过程是这样的:
- 创建索引及其设置和映射
- 填充它
- 完成后,将
live
别名分配给它并发送针对它的查询 - 以后需要索引新数据时,创建另一个索引 你填充新索引
- 完成后,切换别名,即从以前的可搜索索引中删除
live
别名,并将live
别名分配给新的可搜索索引