com.esri.gpt.catalog.lucene.stats.Collectable.java Source code

Java tutorial

Introduction

Here is the source code for com.esri.gpt.catalog.lucene.stats.Collectable.java

Source

/* See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * Esri Inc. licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.esri.gpt.catalog.lucene.stats;

import java.io.IOException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.util.OpenBitSet;

/**
 * Super-class for a collectable set of statistics.
 */
abstract class Collectable {

    /** instance variables ====================================================== */
    private long numberOfDocsConsidered = 0;
    private boolean sortByFequency = true;
    private long timeMillis = 0;

    /** constructors ============================================================ */

    /** Default constructor. */
    public Collectable() {
    }

    /** properties  ============================================================= */

    /**
     * Gets the number of documents considered during stats collection.
     * @return the number of documents considered
     */
    public long getNumberOfDocsConsidered() {
        return this.numberOfDocsConsidered;
    }

    /**
     * Sets the number of documents considered during stats collection.
     * @param count the number of documents considered
     */
    protected void setNumberOfDocsConsidered(long count) {
        this.numberOfDocsConsidered = count;
    }

    /** 
     * Gets the flag indicating whether or not results should be sorted by frequency.
     * @return true if results should be sorted by frequency
     */
    protected boolean getSortByFrequency() {
        return this.sortByFequency;
    }

    /** 
     * Gets the execution time.
     * @return the execution time (in milliseconds)
     */
    public long getTimeMillis() {
        return this.timeMillis;
    }

    /** 
     * Sets the execution time.
     * @param millis the execution time (in milliseconds)
     */
    protected void setTimeMillis(long millis) {
        this.timeMillis = millis;
    }

    /** methods ================================================================= */

    /**
     * Executes the collection of statistics.
     * @param request the active statistics request
     * @param reader the index reader
     * @throws IOException if an error occurs while communicating with the index
     */
    public abstract void collectStats(StatsRequest request, IndexReader reader) throws IOException;

    /**
     * Determines the number of documents considered during stats collection.
     * <br/>If the document filter bitset is not null, the count will be based upon it's cardinality.
     * <br/>Otherwise the count will be based upon the number of docs returned by the reader.
     * @param reader the index reader
     * @param documentFilterBitSet the bitset represing the subset of documents being cosidered
     * @return the total number of documents
     */
    protected long determineNumberOfDocsConsidered(IndexReader reader, OpenBitSet documentFilterBitSet) {
        if (documentFilterBitSet != null) {
            this.setNumberOfDocsConsidered(documentFilterBitSet.cardinality());
        } else {
            this.setNumberOfDocsConsidered(reader.numDocs());
        }
        return this.getNumberOfDocsConsidered();
    }

}