extracting all fields from a Lucene8 index

喜你入骨 提交于 2021-02-11 14:54:28

问题


Given an index created with Lucene-8, but without knowledge of the fields used, how can I programmatically extract all the fields? (I'm aware that the Luke browser can be used interactively (thanks to @andrewjames) Examples for using latest version of Lucene. ) The scenario is that, during a development phase, I have to read indexes without prescribed schemas. I'm using

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

The reader has methods such as:

reader.getDocCount(field);

but this requires knowing the fields in advance.

I understand that documents in the index may be indexed with different fields; I'm quite prepared to iterate over all documents and extract the fields on a regular basis (these indexes are not huge).

I'm using Lucene 8.5.* so post and tutorials based on earlier Lucene versions may not work.


回答1:


You can access basic field info as follows:

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


来源:https://stackoverflow.com/questions/62128466/extracting-all-fields-from-a-lucene8-index

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!