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