All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.solr.handler.component.FieldFacetStats Maven / Gradle / Ivy

package org.apache.solr.handler.component;
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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.
 */

import org.apache.lucene.search.FieldCache;
import org.apache.solr.schema.FieldType;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


/**
 * 9/10/2009 - Moved out of StatsComponent to allow open access to UnInvertedField
 * FieldFacetStats is a utility to accumulate statistics on a set of values in one field,
 * for facet values present in another field.
 * 

* @see org.apache.solr.handler.component.StatsComponent * */ public class FieldFacetStats { public final String name; final FieldCache.StringIndex si; final FieldType ft; final String[] terms; final int[] termNum; final int startTermIndex; final int endTermIndex; final int nTerms; final int numStatsTerms; public final Map facetStatsValues; final List> facetStatsTerms; public FieldFacetStats(String name, FieldCache.StringIndex si, FieldType ft, int numStatsTerms) { this.name = name; this.si = si; this.ft = ft; this.numStatsTerms = numStatsTerms; terms = si.lookup; termNum = si.order; startTermIndex = 1; endTermIndex = terms.length; nTerms = endTermIndex - startTermIndex; facetStatsValues = new HashMap(); // for mv stats field, we'll want to keep track of terms facetStatsTerms = new ArrayList>(); if (numStatsTerms == 0) return; int i = 0; for (; i < numStatsTerms; i++) { facetStatsTerms.add(new HashMap()); } } String getTermText(int docID) { return terms[termNum[docID]]; } public boolean facet(int docID, Double v) { int term = termNum[docID]; int arrIdx = term - startTermIndex; if (arrIdx >= 0 && arrIdx < nTerms) { String key = ft.indexedToReadable(terms[term]); StatsValues stats = facetStatsValues.get(key); if (stats == null) { stats = new StatsValues(); facetStatsValues.put(key, stats); } if (v != null) { stats.accumulate(v); } else { stats.missing++; return false; } return true; } return false; } // Function to keep track of facet counts for term number. // Currently only used by UnInvertedField stats public boolean facetTermNum(int docID, int statsTermNum) { int term = termNum[docID]; int arrIdx = term - startTermIndex; if (arrIdx >= 0 && arrIdx < nTerms) { String key = ft.indexedToReadable(terms[term]); HashMap statsTermCounts = facetStatsTerms.get(statsTermNum); Integer statsTermCount = statsTermCounts.get(key); if (statsTermCount == null) { statsTermCounts.put(key, 1); } else { statsTermCounts.put(key, statsTermCount + 1); } return true; } return false; } //function to accumulate counts for statsTermNum to specified value public boolean accumulateTermNum(int statsTermNum, Double value) { if (value == null) return false; for (Map.Entry stringIntegerEntry : facetStatsTerms.get(statsTermNum).entrySet()) { Map.Entry pairs = (Map.Entry) stringIntegerEntry; String key = (String) pairs.getKey(); StatsValues facetStats = facetStatsValues.get(key); if (facetStats == null) { facetStats = new StatsValues(); facetStatsValues.put(key, facetStats); } Integer count = (Integer) pairs.getValue(); if (count != null) { facetStats.accumulate(value, count); } } return true; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy