我正在编写一个 shell 脚本(csh),它必须确定 lucene 索引版本,然后根据该版本将索引升级到下一个版本。
所以,如果 lucene 索引是 2.x,我必须将索引升级到 3.x
最后索引需要升级到6.x。
由于升级索引是一个顺序过程(2.x->3.x->4.x->5.x->6.x),我必须事先知道索引版本,以便我可以正确设置类路径并升级。
请帮我解决这个问题。
这不是一个非常干净的解决方案,但这就是我能够通过段信息 https://lucene.apache.org/core/6_5_0/core/org/apache/lucene/index/SegmentInfos.html.
LuceneVersion --> 这次提交使用了哪个 Lucene 代码版本,
写成三个 vInt:major、minor、bugfix
当您创建您的IndexReader
,它是具体的读者类别之一,例如 -标准目录阅读器 https://lucene.apache.org/core/6_5_0/core/org/apache/lucene/index/StandardDirectoryReader.html这个类有一个toString()
像下面这样的方法打印每个段的 lucene 版本,这样你就可以简单地调用 -toString()
on IndexReader
实例。
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder();
buffer.append(getClass().getSimpleName());
buffer.append('(');
final String segmentsFile = segmentInfos.getSegmentsFileName();
if (segmentsFile != null) {
buffer.append(segmentsFile).append(":").append(segmentInfos.getVersion());
}
if (writer != null) {
buffer.append(":nrt");
}
for (final LeafReader r : getSequentialSubReaders()) {
buffer.append(' ');
buffer.append(r);
}
buffer.append(')');
return buffer.toString();
}
我想,整个索引的单一版本没有意义,因为索引也可能包含以前版本编写者提交的文档。
如果版本距离不远于 Lucene 定义的范围,则可以使用最新版本的阅读器来搜索由较旧的 lucene 版本编写者提交的文档。
您可以使用正则表达式在 Core Java 中编写一个简单的逻辑来提取最高的 lucene 版本作为您的 lucene 索引版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)