使用elasticsearch percolator索引时有没有办法提高内存性能?
我为我的渗滤器创建了一个单独的索引。我有大约 1 000 000 个用户创建的已保存搜索(用于电子邮件警报)。创建此渗透器索引后,我的堆使用率飙升至 100%,并且服务器对任何查询都没有响应。我的资源有限,无法简单地投入更多内存来解决问题。唯一的解决方案是删除包含我保存的搜索的索引。
据我所知,渗滤器索引永久驻留在内存中。这完全有必要吗?有没有办法限制这种行为但仍然保留功能?有没有办法优化我的数据/查询/索引结构来避免这种行为,同时仍然达到预期的结果?
从 ElasticSearch 的角度来看,这个问题没有解决方案,也不可能有解决方案。我直接与 ElasticSearch 人员交谈,他们的答案是:“投入更多硬件”。
然而,我找到了一种方法来解决这个问题,减少我对该功能的使用。当我分析保存的搜索数据时,我发现我的搜索包含大约 100 000 个唯一关键字搜索以及创建超过 1 000 000 个保存搜索的各种过滤器排列。
如果我看一下过滤器,它们是这样的:
- 地点 - 300+
- 工业 - 50+
- etc...
给出解空间:
100 000 * >300 * >50 * ... ~= > 1 500 000 000
但是,如果我要分解搜索并在渗滤器索引中单独索引关键字搜索和过滤器,
我最终的搜索量要少得多:
100 000 + >300 + >50 + ... ~= > 100 350
这些搜索本身比原始搜索更小、更简单。
现在,我创建第二个(非渗透器)索引,列出所有 1 000 000 个已保存的搜索,并包括来自
渗滤器指数。
然后我过滤文档,然后执行第二个查询,根据关键字过滤搜索并过滤过滤器结果。
我什至能够保留相关性分数,因为这纯粹是从关键字搜索返回的。
这种方法将显着减少我的渗透器索引内存占用,同时达到相同的目的。
我想邀请对此方法的反馈(我还没有尝试过,但我会随时通知您)。
同样,如果我的方法成功,您认为值得提出功能请求吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)