当前位置: 首页 > 面试题库 >

如何优化Elasticsearch渗滤器索引的内存性能

祁承望
2023-03-14
问题内容

使用Elasticsearch渗滤器索引时,有没有办法改善内存性能?

我为渗滤器创建了一个单独的索引。我大约有1000000个用户创建了保存的搜索(用于电子邮件警报)。创建此过滤器索引后,我的堆使用率飙升至100%,服务器对任何查询均无响应。我的资源有限,无法简单地在此问题上投入更多的RAM。唯一的解决方案是删除包含我已保存的搜索的索引。

根据我的阅读,渗滤器索引永久地驻留在内存中。这完全必要吗?有没有办法限制这种行为但仍保留功能?有没有一种方法可以优化我的数据/查询/索引结构来规避这种行为,同时仍能达到预期的结果?


问题答案:

从ElasticSearch的角度来看,没有解决此问题的方法,也不可能。我已经直接与ElasticSearch的家伙聊天,他们的回答是:“向它扔更多的硬件”。

但是,我已经找到了解决此问题的方法,以减轻我对该功能的使用。当我分析保存的搜索数据时,我发现我的搜索由大约100
000个唯一关键字搜索以及各种过滤器排列组成,这些搜索创建了超过1000000个保存的搜索。

如果我看一下过滤器,它们就是:

  • 位置-300+
  • 工业-50+
  • 等等…

提供以下解决方案空间:

100 000 > 300 > 50 * …〜=> 1500万

但是,如果我要分解搜索并在渗滤器索引中分别为关键词搜索和过滤器建立索引,那么最终的搜索量会少得多:

100000 +> 300 +> 50 + …〜=> 100350

而且这些搜索本身比原始搜索要小且不那么复杂。

现在,我创建第二个(非过滤器)索引,列出所有已保存的1000000次搜索,并包括过滤器索引中搜索组件的ID。

然后,我对文档进行渗滤,然后执行第二个查询,以针对关键字过滤搜索并过滤渗滤器结果。我什至能够保留相关性分数,因为它仅从关键字搜索中返回。

这种方法将大大减少我的过滤器索引的内存占用,同时达到相同的目的。

我想邀请您就此方法提供反馈(我尚未尝试过,但会及时通知您)。

同样,如果我的方法成功了,您认为值得提出功能要求吗?



 类似资料:
  • 问题内容: 我试图了解如何在Elasticsearch上优化索引。让我澄清我的需求; 我现在有两个指标。可以这样说和(两个索引可以看到大致相同的大小) 我有6台专用于Elasticsearch的机器(我们可以说完全相同的硬件) 我的elasticsearch用法中最重要的部分是写作,因为我实时进行大量写作。 所以我的问题是,如何使用这6台机器优化写入操作? 我是否应该将机器分为两部分,例如3台机器

  • 本文向大家介绍mysql性能优化之索引优化,包括了mysql性能优化之索引优化的使用技巧和注意事项,需要的朋友参考一下   作为免费又高效的数据库,mysql基本是首选。良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多

  • 本文向大家介绍MySQL如何优化索引,包括了MySQL如何优化索引的使用技巧和注意事项,需要的朋友参考一下 1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,花费越多。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据。这比顺序读取每一行要快得多。 大多数MyS

  • 链接 bulk提交 gateway配置 集群状态维护 缓存 fielddata curator工具 profile接口

  • 问题内容: 即使我阅读了Elasticsearch的文档以了解什么是渗滤器。我仍然很难理解它的含义以及简单用在何处。谁能为我提供更多详细信息? 问题答案: 通常,您要做的是索引文档并通过查询将其取回。简而言之,渗透过滤器允许您执行的操作是对查询进行索引,并针对已索引的查询对文档进行渗透,以了解它们匹配的查询。这也称为反向搜索,因为您所做的与您习惯的相反。 渗滤器有不同的用例,第一个是存储用户兴趣的

  • 本文向大家介绍Redis 如何做内存优化?相关面试题,主要包含被问及Redis 如何做内存优化?时的应答技巧和注意事项,需要的朋友参考一下 尽量使用 Redis 的散列表,把相关的信息放到散列表里面存储,而不是把每个字段单独存储,这样可以有效的减少内存使用。比如将 Web 系统的用户对象,应该放到散列表里面再整体存储到 Redis,而不是把用户的姓名、年龄、密码、邮箱等字段分别设置 key 进行存