如何将write/serializelucene的ByteBuffersDirectory写入磁盘?
How to write/serialize lucene's ByteBuffersDirectory to disk?
如何将 Lucene 8.11 ByteBuffersDirectory
写入磁盘?
类似于 Lucene 2.9.4 Directory.copy(directory, FSDirectory.open(indexPath), true)
您可以使用 copyFrom
方法来完成此操作。
例如:
您正在使用 ByteBuffersDirectory
:
final Directory dir = new ByteBuffersDirectory();
假设您没有同时向 dir
写入任何新数据,您可以声明要写入数据的目标 - 例如,FSDirectory
(文件系统目录) :
Directory to = FSDirectory.open(Paths.get(OUT_DIR_PATH));
在 OUT_DIR_PATH
位置使用您想要的任何字符串。
然后您可以遍历原始 dir
对象中的所有文件,将它们写入这个新的 to
位置:
IOContext ctx = new IOContext();
for (String file : dir.listAll()) {
System.out.println(file); // just for testing
to.copyFrom(dir, file, file, ctx);
}
这将创建新的 OUT_DIR_PATH
目录并在其中填充文件,例如:
_0.cfe
_0.cfs
_0.si
segments_1
...或您 dir
.
中碰巧拥有的任何文件
警告:
我只将它与默认的 IOContext
对象一起使用。上下文还有其他构造函数 - 不确定它们的作用。我假设它们可以让您更好地控制写入的执行方式。
与此同时,我自己想出了一个简单的方法:
@SneakyThrows
public static void copyIndex(ByteBuffersDirectory ramDirectory, Path destination) {
FSDirectory fsDirectory = FSDirectory.open(destination);
Arrays.stream(ramDirectory.listAll())
.forEach(fileName -> {
try {
// IOContext is null because in fact is not used (at least for the moment)
fsDirectory.copyFrom(ramDirectory, fileName, fileName, null);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
});
}
如何将 Lucene 8.11 ByteBuffersDirectory
写入磁盘?
类似于 Lucene 2.9.4 Directory.copy(directory, FSDirectory.open(indexPath), true)
您可以使用 copyFrom
方法来完成此操作。
例如:
您正在使用 ByteBuffersDirectory
:
final Directory dir = new ByteBuffersDirectory();
假设您没有同时向 dir
写入任何新数据,您可以声明要写入数据的目标 - 例如,FSDirectory
(文件系统目录) :
Directory to = FSDirectory.open(Paths.get(OUT_DIR_PATH));
在 OUT_DIR_PATH
位置使用您想要的任何字符串。
然后您可以遍历原始 dir
对象中的所有文件,将它们写入这个新的 to
位置:
IOContext ctx = new IOContext();
for (String file : dir.listAll()) {
System.out.println(file); // just for testing
to.copyFrom(dir, file, file, ctx);
}
这将创建新的 OUT_DIR_PATH
目录并在其中填充文件,例如:
_0.cfe
_0.cfs
_0.si
segments_1
...或您 dir
.
警告:
我只将它与默认的 IOContext
对象一起使用。上下文还有其他构造函数 - 不确定它们的作用。我假设它们可以让您更好地控制写入的执行方式。
与此同时,我自己想出了一个简单的方法:
@SneakyThrows
public static void copyIndex(ByteBuffersDirectory ramDirectory, Path destination) {
FSDirectory fsDirectory = FSDirectory.open(destination);
Arrays.stream(ramDirectory.listAll())
.forEach(fileName -> {
try {
// IOContext is null because in fact is not used (at least for the moment)
fsDirectory.copyFrom(ramDirectory, fileName, fileName, null);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
});
}