作者回复: 非常棒的总结。你是听了课查了文档总结的吗? 当数据从hot移动到warm,官方建议手工执行一下_forcemerge
作者回复: 嗯 👍
作者回复: tranactionlog 每次落盘,也可以配置成async,异步操作。 refresh默认一秒生成一个segment,你可以修改刷新的时间,这样就是数据被查到的实施性降低了。你也可以在大量数据写入时,暂时将它设置成-1,也就是不自动刷新。 这两个参数,在数据写入时,都是可以做优化的点。缺点就是分别损失了搜索的实时性和数据的安全性。 这样的设计有一定的灵活性和可配置性。直接都做落盘处理,在有些情况下不够灵活
作者回复: 我觉得先可以吧视频课程都过一下,然后再结合考试的纲要熟悉一下相关的api。其实要真的能把api都通读一下,我觉得不需要再看专门的书了。
作者回复: 倒排索引不可变,指的是你无法对原有的进行更新,而是创建新的,把老的暂时标记成删除。 reindex是说mapping发生变化,或者分词器发生变化,对倒排索引进行重建。应该是不同的概念
作者回复: 你可以监控用户的搜索条件和实际结果,同时监控用户实际的点击,然后针对这些去做具体的优化,同时在这个过程不断的完善自己的词库
作者回复: 没有一个标准的答案。 刷新时间小于一秒,必然对硬件的要求会更加好。硬件如果不够,那就只能增加硬件投入。 同时,可以考虑对数据的模型进行优化,做更加合理的数据建模和mapping设定
作者回复: merge一般不需要人为参与,es自动会做。索引从hot迁移到warm,可以人为对索引做一次force merge
作者回复: 一般情况,我们不需要去手工执行force_merge,因为这是一个比较消耗资源的操作。只有在一些特殊的场景,例如把数据从hot节点移动到warm节点后,才会考虑手动执行force merge。
作者回复: 按照你的描述,我的理解,数据量增加以后。当数据没有写入,terms 聚合速度很快,一旦有写入,再去查,aggs就比较慢。 你觉得你可以考虑在做terms aggs时,为keyword字段加上eager_global_oridinals =true试试。因为这样有数据写入refresh时,就会创建缓存,使得你的terms aggs性能得到提升。