如何仅在“内存中”使用弹性搜索索引?

问题描述

我有一个用于存储文档并使用Elasticsearch客户端编制索引的类。我希望索引仅在内存中,除非明确将其保存到磁盘。具体来说:

  • 可以创建索引并进行搜索
  • 如果会话未保存,则在会话结束时从磁盘上擦除
  • 如果已保存,则将其持久保存到磁盘

但是,Elasticsearch实际上是磁盘上的服务(将索引直接写到磁盘上,在询问时删除)。

有没有办法从Elasticsearch获得所需的行为?

解决方法

该功能在很久以前(在ES 1.7中)已被删除。可以利用memory store将所有内容存储在内存中而不是文件中。

出于显而易见的原因,这在ES 2.0中是deprecated and removed,即在节点崩溃的情况下不提供任何弹性。

启动preload everything in memory的能力与之相似,即使这不能完全满足您的要求。随意说明为什么需要这种行为。

,

您是正确的,Elasticsearch文档已保存在磁盘中,但是数据已缓存在RAM中,因此只要您有足够的内存,我们的/ GET查询在搜索时将获得更快的响应。

您可以使用以下查询将索引存储类型显式标记为已缓存,以通过将文件映射到内存将碎片索引存储在文件系统(映射到Lucene MMapDirectory)上

curl -XPUT /indexname { "settings": { "index.store.type": "mmapfs" } }

mmapfs

The MMap FS type stores the shard index on the file system (maps to Lucene MMapDirectory) by mapping a file into memory (mmap). Memory mapping uses up a portion of the virtual memory address space in your process equal to the size of the file being mapped. Before using this class,be sure you have allowed plenty of virtual address space.

在此处详细了解索引存储类型:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html

如果您正在处理Elasticsearch上的海量数据,并且最近查询索引的频率更高,则可以尝试使用ElasticSearch Hot-warm节点体系结构;对于热节点,可以将索引存储设置应用于{{1} }可能仅适用于热节点

更多信息: https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...