从 Lucene8 索引中提取所有字段
extracting all fields from a Lucene8 index
给定一个使用 Lucene-8 创建的索引,但不知道使用的 field
s,我如何以编程方式提取所有字段? (我知道 Luke 浏览器可以交互使用(感谢@andrewjames)。)场景是,在开发阶段,我必须读取没有规定模式的索引。
我正在使用
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);
reader
有如下方法:
reader.getDocCount(field);
但这需要提前了解字段。
我了解索引中的文档可能会使用不同的字段进行索引;我已经准备好定期遍历所有文档并提取字段(这些索引并不大)。
我使用的是 Lucene 8.5。* 所以 post 和基于早期 Lucene 版本的教程可能无法使用。
您可以通过以下方式访问基本字段信息:
import java.util.List;
import java.io.IOException;
import java.nio.file.Paths;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.store.FSDirectory;
public class IndexDataExplorer {
private static final String INDEX_PATH = "/path/to/index/directory";
public static void doSearch() throws IOException {
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(INDEX_PATH)));
for (int i = 0; i < reader.numDocs(); i++) {
Document doc = reader.document(i);
List<IndexableField> fields = doc.getFields();
for (IndexableField field : fields) {
// use these to get field-related data:
//field.name();
//field.fieldType().toString();
}
}
}
}
给定一个使用 Lucene-8 创建的索引,但不知道使用的 field
s,我如何以编程方式提取所有字段? (我知道 Luke 浏览器可以交互使用(感谢@andrewjames)
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);
reader
有如下方法:
reader.getDocCount(field);
但这需要提前了解字段。
我了解索引中的文档可能会使用不同的字段进行索引;我已经准备好定期遍历所有文档并提取字段(这些索引并不大)。
我使用的是 Lucene 8.5。* 所以 post 和基于早期 Lucene 版本的教程可能无法使用。
您可以通过以下方式访问基本字段信息:
import java.util.List;
import java.io.IOException;
import java.nio.file.Paths;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.store.FSDirectory;
public class IndexDataExplorer {
private static final String INDEX_PATH = "/path/to/index/directory";
public static void doSearch() throws IOException {
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(INDEX_PATH)));
for (int i = 0; i < reader.numDocs(); i++) {
Document doc = reader.document(i);
List<IndexableField> fields = doc.getFields();
for (IndexableField field : fields) {
// use these to get field-related data:
//field.name();
//field.fieldType().toString();
}
}
}
}