Example usage for org.apache.lucene.index SegmentReader getFieldInfos

List of usage examples for org.apache.lucene.index SegmentReader getFieldInfos

Introduction

In this page you can find the example usage for org.apache.lucene.index SegmentReader getFieldInfos.

Prototype

@Override
    public FieldInfos getFieldInfos() 

Source Link

Usage

From source file:org.eu.bitzone.Leia.java

License:Apache License

public void showDiagnostics(final Object segmentsTable) {
    final Object diagsTable = find("diagsTable");
    removeAll(diagsTable);/*w ww.  java2s .c  o m*/
    final Object row = getSelectedItem(segmentsTable);
    if (row == null) {
        return;
    }
    final SegmentCommitInfo si = (SegmentCommitInfo) getProperty(row, "si");
    if (si == null) {
        showStatus("Missing SegmentInfoPerCommit???");
        return;
    }
    Map<String, String> map = si.info.attributes();
    if (map != null) {
        for (final Entry<String, String> e : map.entrySet()) {
            final Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "A");
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey());
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            add(r, cell);
        }
    }
    // separator
    // Object r1 = create("row");
    // add(diagsTable, r1);
    // Object c1 = create("cell");
    // setBoolean(c1, "enabled", false);
    // add(r1, c1);
    map = si.info.getDiagnostics();
    if (map != null) {
        for (final Entry<String, String> e : map.entrySet()) {
            final Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "D");
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey());
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            add(r, cell);
        }
    }
    // separator
    Object r1 = create("row");
    add(diagsTable, r1);
    Object c1 = create("cell");
    setBoolean(c1, "enabled", false);
    add(r1, c1);
    // codec info
    final Codec codec = si.info.getCodec();
    map = new LinkedHashMap<String, String>();
    map.put("codecName", codec.getName());
    map.put("codecClassName", codec.getClass().getName());
    map.put("docValuesFormat", codec.docValuesFormat().getClass().getName());
    map.put("fieldInfosFormat", codec.fieldInfosFormat().getClass().getName());
    map.put("liveDocsFormat", codec.liveDocsFormat().getClass().getName());
    map.put("normsFormat", codec.normsFormat().getClass().getName());
    map.put("postingsFormat",
            codec.postingsFormat().toString() + " " + codec.postingsFormat().getClass().getName());
    map.put("segmentInfoFormat", codec.segmentInfoFormat().getClass().getName());
    map.put("storedFieldsFormat", codec.storedFieldsFormat().getClass().getName());
    map.put("termVectorsFormat", codec.termVectorsFormat().getClass().getName());
    try {
        final List<String> files = new ArrayList<String>(si.files());
        Collections.sort(files);
        map.put("---files---", files.toString());
        if (si.info.getUseCompoundFile()) {
            final Directory d = new CompoundFileDirectory(dir,
                    IndexFileNames.segmentFileName(si.info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION),
                    IOContext.READ, false);
            files.clear();
            files.addAll(Arrays.asList(d.listAll()));
            d.close();
            Collections.sort(files);
            map.put("-CFS-files-", files.toString());
        }
    } catch (final Exception e) {
        e.printStackTrace();
        map.put("---files---", "Exception: " + e.toString());
    }
    for (final Entry<String, String> e : map.entrySet()) {
        final Object r = create("row");
        add(diagsTable, r);
        Object cell = create("cell");
        setString(cell, "text", "C");
        add(r, cell);
        cell = create("cell");
        setString(cell, "text", e.getKey());
        add(r, cell);
        cell = create("cell");
        setString(cell, "text", e.getValue());
        add(r, cell);
    }
    // fieldInfos
    try {
        final SegmentReader sr = new SegmentReader(si, 1, IOContext.READ);
        final FieldInfos fis = sr.getFieldInfos();
        map = new LinkedHashMap<String, String>();
        final List<String> flds = new ArrayList<String>(fis.size());
        for (final FieldInfo fi : fis) {
            flds.add(fi.name);
        }
        Collections.sort(flds);
        map.put("L---fields---", flds.toString());
        for (final String fn : flds) {
            final FieldInfo fi = fis.fieldInfo(fn);
            map.put("A" + fi.name, fi.attributes().toString());
        }
        map.put("F---flags----", "IdfpoPVNtxxDtxx");
        for (final String fn : flds) {
            final FieldInfo fi = fis.fieldInfo(fn);
            map.put("F" + fi.name, Util.fieldFlags(null, fi));
        }
        sr.close();
        // separator
        r1 = create("row");
        add(diagsTable, r1);
        c1 = create("cell");
        setBoolean(c1, "enabled", false);
        add(r1, c1);
        for (final Entry<String, String> e : map.entrySet()) {
            final Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "F" + e.getKey().charAt(0));
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey().substring(1));
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            if (e.getKey().startsWith("F")) {
                setFont(cell, courier);
            }
            add(r, cell);
        }
    } catch (final IOException e1) {
        e1.printStackTrace();
    }
}

From source file:org.getopt.luke.Luke.java

License:Apache License

public void showDiagnostics(Object segmentsTable) {
    Object diagsTable = find("diagsTable");
    removeAll(diagsTable);/* w w  w .  ja v a2  s  .co  m*/
    Object row = getSelectedItem(segmentsTable);
    if (row == null) {
        return;
    }
    SegmentCommitInfo si = (SegmentCommitInfo) getProperty(row, "si");
    if (si == null) {
        showStatus("Missing SegmentInfoPerCommit???");
        return;
    }
    Map<String, String> map = si.info.attributes();
    if (map != null) {
        for (Entry<String, String> e : map.entrySet()) {
            Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "A");
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey());
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            add(r, cell);
        }
    }
    // separator
    //    Object r1 = create("row");
    //    add(diagsTable, r1);
    //    Object c1 = create("cell");
    //    setBoolean(c1, "enabled", false);
    //    add(r1, c1);
    map = si.info.getDiagnostics();
    if (map != null) {
        for (Entry<String, String> e : map.entrySet()) {
            Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "D");
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey());
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            add(r, cell);
        }
    }
    // separator
    Object r1 = create("row");
    add(diagsTable, r1);
    Object c1 = create("cell");
    setBoolean(c1, "enabled", false);
    add(r1, c1);
    // codec info
    Codec codec = si.info.getCodec();
    map = new LinkedHashMap<String, String>();
    map.put("codecName", codec.getName());
    map.put("codecClassName", codec.getClass().getName());
    map.put("docValuesFormat", codec.docValuesFormat().getClass().getName());
    map.put("fieldInfosFormat", codec.fieldInfosFormat().getClass().getName());
    map.put("liveDocsFormat", codec.liveDocsFormat().getClass().getName());
    map.put("normsFormat", codec.normsFormat().getClass().getName());
    map.put("postingsFormat",
            codec.postingsFormat().toString() + " " + codec.postingsFormat().getClass().getName());
    map.put("segmentInfoFormat", codec.segmentInfoFormat().getClass().getName());
    map.put("storedFieldsFormat", codec.storedFieldsFormat().getClass().getName());
    map.put("termVectorsFormat", codec.termVectorsFormat().getClass().getName());
    try {
        List<String> files = new ArrayList<String>(si.files());
        Collections.sort(files);
        map.put("---files---", files.toString());
        if (si.info.getUseCompoundFile()) {
            Directory d = new CompoundFileDirectory(dir,
                    IndexFileNames.segmentFileName(si.info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION),
                    IOContext.READ, false);
            files.clear();
            files.addAll(Arrays.asList(d.listAll()));
            d.close();
            Collections.sort(files);
            map.put("-CFS-files-", files.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
        map.put("---files---", "Exception: " + e.toString());
    }
    for (Entry<String, String> e : map.entrySet()) {
        Object r = create("row");
        add(diagsTable, r);
        Object cell = create("cell");
        setString(cell, "text", "C");
        add(r, cell);
        cell = create("cell");
        setString(cell, "text", e.getKey());
        add(r, cell);
        cell = create("cell");
        setString(cell, "text", e.getValue());
        add(r, cell);
    }
    // fieldInfos
    try {
        SegmentReader sr = new SegmentReader(si, 1, IOContext.READ);
        FieldInfos fis = sr.getFieldInfos();
        map = new LinkedHashMap<String, String>();
        List<String> flds = new ArrayList<String>(fis.size());
        for (FieldInfo fi : fis) {
            flds.add(fi.name);
        }
        Collections.sort(flds);
        map.put("L---fields---", flds.toString());
        for (String fn : flds) {
            FieldInfo fi = fis.fieldInfo(fn);
            map.put("A" + fi.name, fi.attributes().toString());
        }
        map.put("F---flags----", "IdfpoPVNtxxDtxx");
        for (String fn : flds) {
            FieldInfo fi = fis.fieldInfo(fn);
            map.put("F" + fi.name, Util.fieldFlags(null, fi));
        }
        sr.close();
        // separator
        r1 = create("row");
        add(diagsTable, r1);
        c1 = create("cell");
        setBoolean(c1, "enabled", false);
        add(r1, c1);
        for (Entry<String, String> e : map.entrySet()) {
            Object r = create("row");
            add(diagsTable, r);
            Object cell = create("cell");
            setString(cell, "text", "F" + e.getKey().charAt(0));
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getKey().substring(1));
            add(r, cell);
            cell = create("cell");
            setString(cell, "text", e.getValue());
            if (e.getKey().startsWith("F")) {
                setFont(cell, courier);
            }
            add(r, cell);
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}

From source file:perf.DiskUsage.java

License:Apache License

static Set<FieldStats> analyzeFields(SegmentReader reader) throws Exception {
    Map<String, FieldStats> stats = new HashMap<>();
    Map<String, String> dvSuffixes = new HashMap<>();
    Map<String, String> postingsSuffixes = new HashMap<>();
    for (FieldInfo field : reader.getFieldInfos()) {
        FieldStats fieldStats = new FieldStats(field.name);
        stats.put(field.name, fieldStats);
        Map<String, String> attributes = field.attributes();
        if (attributes != null) {
            String postingsSuffix = attributes.get(PerFieldPostingsFormat.PER_FIELD_SUFFIX_KEY);
            if (postingsSuffix != null) {
                postingsSuffixes.put(postingsSuffix, field.name);
            }//w  w  w.  j  a v a  2s.  c  o  m
            String dvSuffix = attributes.get(PerFieldDocValuesFormat.PER_FIELD_SUFFIX_KEY);
            if (dvSuffix != null) {
                dvSuffixes.put(dvSuffix, field.name);
            }
        }

        Bits docsWithField = reader.getDocsWithField(field.name);
        if (docsWithField != null) {
            int count = 0;
            for (int docID = 0; docID < reader.maxDoc(); docID++) {
                if (docsWithField.get(docID)) {
                    count++;
                }
            }
            fieldStats.docCountWithField = count;
        }
    }

    Directory directory = reader.directory();
    for (String file : directory.listAll()) {
        String suffix = parseSuffix(file);
        long bytes = directory.fileLength(file);
        if (suffix != null) {
            switch (IndexFileNames.getExtension(file)) {
            case "dvd":
            case "dvm":
                stats.get(dvSuffixes.get(suffix)).dvBytes += bytes;
                break;
            case "tim":
            case "tip":
                stats.get(postingsSuffixes.get(suffix)).termsBytes += bytes;
                break;
            case "doc":
                stats.get(postingsSuffixes.get(suffix)).postingsBytes += bytes;
                break;
            case "pos":
            case "pay":
                stats.get(postingsSuffixes.get(suffix)).proxBytes += bytes;
                break;
            default:
                throw new AssertionError("unexpected suffixed file: " + file);
            }
        } else {
            // not a per-field file, but we can hackishly do this for the points case.
            if ("dii".equals(IndexFileNames.getExtension(file))) {
                System.err.println(
                        "retrieving per-field point usage, if you see a scary corruption error, its probably just this tool!!!!");
                try (ChecksumIndexInput in = directory.openChecksumInput(file, IOContext.READONCE)) {
                    // fail hard if its not exactly the version we do this hack for.
                    CodecUtil.checkIndexHeader(in, "Lucene60PointsFormatMeta", 0, 0,
                            reader.getSegmentInfo().info.getId(), "");
                    int fieldCount = in.readVInt();
                    // strangely, bkd offsets are not in any guaranteed order
                    TreeMap<Long, String> offsetToField = new TreeMap<>();
                    for (int i = 0; i < fieldCount; i++) {
                        int field = in.readVInt();
                        long offset = in.readVLong();
                        offsetToField.put(offset, reader.getFieldInfos().fieldInfo(field).name);
                    }
                    // now we can traverse in order
                    long previousOffset = 0;
                    for (Map.Entry<Long, String> entry : offsetToField.entrySet()) {
                        long offset = entry.getKey();
                        String field = entry.getValue();
                        stats.get(field).pointsBytes += (offset - previousOffset);
                        previousOffset = offset;
                    }
                    CodecUtil.checkFooter(in);
                }
            }
        }
    }

    return new TreeSet<FieldStats>(stats.values());
}

From source file:perf.DiskUsage.java

License:Apache License

static void report(SegmentReader reader, Set<FieldStats> stats) throws Exception {
    long totalSize = 0;
    long storeSize = 0;
    long vectorSize = 0;
    long normsSize = 0;
    long dvsSize = 0;
    long postingsSize = 0;
    long pointsSize = 0;
    long termsSize = 0;
    long proxSize = 0;
    for (String file : reader.directory().listAll()) {
        long size = reader.directory().fileLength(file);
        totalSize += size;// w w w.  j av  a2  s  .  c  om
        String extension = IndexFileNames.getExtension(file);
        if (extension != null) {
            switch (extension) {
            case "fdt":
            case "fdx":
                storeSize += size;
                break;
            case "tvx":
            case "tvd":
                vectorSize += size;
                break;
            case "nvd":
            case "nvm":
                normsSize += size;
                break;
            case "dvd":
            case "dvm":
                dvsSize += size;
                break;
            case "tim":
            case "tip":
                termsSize += size;
                break;
            case "pos":
            case "pay":
                proxSize += size;
                break;
            case "doc":
                postingsSize += size;
                break;
            case "dii":
            case "dim":
                pointsSize += size;
                break;
            }
        }
    }

    DecimalFormat df = new DecimalFormat("#,##0");
    System.out.printf("total disk:    %15s\n", df.format(totalSize));
    System.out.printf("num docs:      %15s\n", df.format(reader.numDocs()));
    System.out.printf("stored fields: %15s\n", df.format(storeSize));
    System.out.printf("term vectors:  %15s\n", df.format(vectorSize));
    System.out.printf("norms:         %15s\n", df.format(normsSize));
    System.out.printf("docvalues:     %15s\n", df.format(dvsSize));
    System.out.printf("postings:      %15s\n", df.format(postingsSize));
    System.out.printf("prox:          %15s\n", df.format(proxSize));
    System.out.printf("points:        %15s\n", df.format(pointsSize));
    System.out.printf("terms:         %15s\n", df.format(termsSize));
    System.out.println();

    int maxFieldNameLength = 0;
    for (FieldStats field : stats) {
        maxFieldNameLength = Math.max(maxFieldNameLength, field.name.length());
    }

    // Make sure we format to enough room for the max field length:
    String fieldNameFormat = "%" + maxFieldNameLength + "s";

    System.out.printf(fieldNameFormat + " %15s %15s %15s %15s %15s %15s %15s %20s\n", "field", "total",
            "terms dict", "postings", "proximity", "points", "docvalues", "% with dv", "features");
    System.out.printf(fieldNameFormat + " %15s %15s %15s %15s %15s %15s %15s %20s\n", "=====", "=====",
            "==========", "========", "=========", "=========", "=========", "========", "========");

    for (FieldStats field : stats) {
        System.out.printf(fieldNameFormat + " %15s %15s %15s %15s %15s %15s %14.1f%% %20s\n", field.name,
                df.format(field.totalBytes()), df.format(field.termsBytes), df.format(field.postingsBytes),
                df.format(field.proxBytes), df.format(field.pointsBytes), df.format(field.dvBytes),
                (100.0 * field.docCountWithField) / reader.maxDoc(),
                features(reader.getFieldInfos().fieldInfo(field.name)));
    }
}

From source file:perf.DiskUsage.java

License:Apache License

static Set<FieldStats> analyzeFields(SegmentReader reader) throws Exception {
    Map<String, FieldStats> stats = new HashMap<>();
    Map<String, String> dvSuffixes = new HashMap<>();
    Map<String, String> postingsSuffixes = new HashMap<>();
    for (FieldInfo field : reader.getFieldInfos()) {
        FieldStats fieldStats = new FieldStats(field.name);
        stats.put(field.name, fieldStats);
        Map<String, String> attributes = field.attributes();
        if (attributes != null) {
            String postingsSuffix = attributes.get(PerFieldPostingsFormat.PER_FIELD_SUFFIX_KEY);
            if (postingsSuffix != null) {
                postingsSuffixes.put(postingsSuffix, field.name);
            }/* w  ww . ja  v a 2 s.  c o m*/
            String dvSuffix = attributes.get(PerFieldDocValuesFormat.PER_FIELD_SUFFIX_KEY);
            if (dvSuffix != null) {
                dvSuffixes.put(dvSuffix, field.name);
            }
        }

        DocIdSetIterator docsWithField;
        switch (field.getDocValuesType()) {
        case NUMERIC:
            docsWithField = reader.getNumericDocValues(field.name);
            break;
        case BINARY:
            docsWithField = reader.getBinaryDocValues(field.name);
            break;
        case SORTED:
            docsWithField = reader.getSortedDocValues(field.name);
            break;
        case SORTED_NUMERIC:
            docsWithField = reader.getSortedNumericDocValues(field.name);
            break;
        case SORTED_SET:
            docsWithField = reader.getSortedSetDocValues(field.name);
            break;
        case NONE:
            docsWithField = null;
            break;
        default:
            docsWithField = null;
            break;
        }

        if (docsWithField != null) {
            int count = 0;
            while (docsWithField.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                count++;
            }
            fieldStats.docCountWithField = count;
        }
    }

    Directory directory = reader.directory();
    for (String file : directory.listAll()) {
        String suffix = parseSuffix(file);
        long bytes = directory.fileLength(file);
        if (suffix != null) {
            switch (IndexFileNames.getExtension(file)) {
            case "dvd":
            case "dvm":
                stats.get(dvSuffixes.get(suffix)).dvBytes += bytes;
                break;
            case "tim":
            case "tip":
                stats.get(postingsSuffixes.get(suffix)).termsBytes += bytes;
                break;
            case "doc":
                stats.get(postingsSuffixes.get(suffix)).postingsBytes += bytes;
                break;
            case "pos":
            case "pay":
                stats.get(postingsSuffixes.get(suffix)).proxBytes += bytes;
                break;
            default:
                throw new AssertionError("unexpected suffixed file: " + file);
            }
        } else {
            // not a per-field file, but we can hackishly do this for the points case.
            if ("dii".equals(IndexFileNames.getExtension(file))) {
                System.err.println(
                        "retrieving per-field point usage, if you see a scary corruption error, its probably just this tool!!!!");
                try (ChecksumIndexInput in = directory.openChecksumInput(file, IOContext.READONCE)) {
                    // fail hard if its not exactly the version we do this hack for.
                    CodecUtil.checkIndexHeader(in, "Lucene60PointsFormatMeta", 0, 0,
                            reader.getSegmentInfo().info.getId(), "");
                    int fieldCount = in.readVInt();
                    // strangely, bkd offsets are not in any guaranteed order
                    TreeMap<Long, String> offsetToField = new TreeMap<>();
                    for (int i = 0; i < fieldCount; i++) {
                        int field = in.readVInt();
                        long offset = in.readVLong();
                        offsetToField.put(offset, reader.getFieldInfos().fieldInfo(field).name);
                    }
                    // now we can traverse in order
                    long previousOffset = 0;
                    for (Map.Entry<Long, String> entry : offsetToField.entrySet()) {
                        long offset = entry.getKey();
                        String field = entry.getValue();
                        stats.get(field).pointsBytes += (offset - previousOffset);
                        previousOffset = offset;
                    }
                    CodecUtil.checkFooter(in);
                }
            }
        }
    }

    return new TreeSet<FieldStats>(stats.values());
}