繁体   English   中英

从 Lucene8 索引中提取所有字段

[英]extracting all fields from a Lucene8 index

给定一个使用 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 版本的帖子和教程可能无法正常工作。

您可以按如下方式访问基本字段信息:

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();
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM