解决 Windows SMB 和 Windows 上 Java 中的错误

编辑

解决 Windows SMB 和 Windows 上 Java 中的错误编辑

当使用基于 SMB 协议的共享文件系统(如 Azure 文件服务)存储索引时,Lucene 打开索引段文件的方式是使用只写标志。这是打开文件的*正确*方式,因为它们将仅用于写入,并且允许不同的文件系统实现对其进行优化。遗憾的是,在使用 SMB 的 Windows 中,这会禁用缓存管理器,导致写入速度变慢。这在 LUCENE-6176 中有所描述,但它会影响到每个 Java 程序!。这需要并且必须在 ES 和/或 Lucene 之外修复,无论是在 Windows 还是 OpenJDK 中。目前,我们提供了一种实验性支持,可以使用读取标志打开文件,但这应该被视为实验性的,正确的修复方法是在 OpenJDK 或 Windows 中。

SMB 存储插件提供了两种针对 SMB 优化的存储类型

smb_mmap_fs
默认 mmap fs 的 SMB 特定实现
smb_simple_fs
已弃用::[7.15,"smb_simple_fs 已弃用,将在 8.0 中删除。请改用 smb_nio_fs 或其他文件系统。"]
smb_nio_fs
默认 nio fs 的 SMB 特定实现

要使用其中一种特定存储类型,您需要安装 SMB 存储插件并重启节点。然后配置 Elasticsearch 以设置所需的存储类型。

可以通过将此添加到 elasticsearch.yml 文件来为所有索引配置此项

index.store.type: smb_nio_fs

请注意,该设置将应用于新创建的索引。

它也可以在索引创建时按索引设置

PUT my-index-000001
{
   "settings": {
       "index.store.type": "smb_mmap_fs"
   }
}