从一个Lucene8索引中提取所有字段。

问题描述 投票:0回答:1

给定一个用Lucene-8创建的索引,但不知道该索引的内容。field的使用,我如何能以编程方式提取所有字段?我知道Luke浏览器可以交互式使用(感谢@andrewjames)。使用最新版本的Lucene的例子. ) 场景是,在开发阶段,我必须读取没有规定模式的索引。我使用的是

IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
IndexSearcher searcher = new IndexSearcher(reader);

reader 有方法,如。

reader.getDocCount(field);

但这需要事先知道字段。

我理解索引中的文档可能会有不同的字段索引;我已经做好了定期遍历所有文档并提取字段的准备(这些索引并不庞大)。

我使用的是Lucene 8.5.*,所以基于早期Lucene版本的帖子和教程可能无法使用。

java lucene
1个回答
1
投票

你可以访问基本的字段信息,如下所示。

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();
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.