Package com.browseengine.bobo.facets.filter

Source Code of com.browseengine.bobo.facets.filter.MultiValueFacetFilter$MultiValueFacetDocIdSetIterator

package com.browseengine.bobo.facets.filter;

import java.io.IOException;

import org.apache.lucene.search.DocIdSetIterator;

import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.docidset.EmptyDocIdSet;
import com.browseengine.bobo.docidset.RandomAccessDocIdSet;
import com.browseengine.bobo.facets.data.FacetDataCache;
import com.browseengine.bobo.facets.data.MultiValueFacetDataCache;
import com.browseengine.bobo.facets.filter.FacetFilter.FacetDocIdSetIterator;
import com.browseengine.bobo.facets.impl.MultiValueFacetHandler;
import com.browseengine.bobo.util.BigNestedIntArray;

public class MultiValueFacetFilter extends RandomAccessFilter
{
    private static final long serialVersionUID = 1L;
   
    private final MultiValueFacetHandler _facetHandler;
    private final String _val;
   
    public MultiValueFacetFilter(MultiValueFacetHandler facetHandler,String val)
    {
        _facetHandler = facetHandler;
        _val = val;
    }
   
    public double getFacetSelectivity(BoboIndexReader reader)
    {
      double selectivity = 0;
      MultiValueFacetDataCache dataCache = _facetHandler.getFacetData(reader);
      int idx = dataCache.valArray.indexOf(_val);
      if(idx<0)
      {
        return 0.0;
      }
      int freq =dataCache.freqs[idx];
      int total = reader.maxDoc();
      selectivity = (double)freq/(double)total;
      return selectivity;
    }
   
   
    private final static class MultiValueFacetDocIdSetIterator extends FacetDocIdSetIterator
    {
        private final BigNestedIntArray _nestedArray;

        public MultiValueFacetDocIdSetIterator(MultiValueFacetDataCache dataCache, int index)
        {
            super(dataCache, index);
            _nestedArray = dataCache._nestedArray;
        }
       
        @Override
        final public int nextDoc() throws IOException
        {
          return (_doc = (_doc < _maxID ? _nestedArray.findValue(_index, (_doc + 1), _maxID) : NO_MORE_DOCS));
        }

        @Override
        final public int advance(int id) throws IOException
        {
          if(_doc < id)
          {
            return (_doc = (id <= _maxID ? _nestedArray.findValue(_index, id, _maxID) : NO_MORE_DOCS));
          }
          return nextDoc();
        }
    }

    @Override
    public RandomAccessDocIdSet getRandomAccessDocIdSet(BoboIndexReader reader) throws IOException {
      final MultiValueFacetDataCache dataCache = _facetHandler.getFacetData(reader);
        final int index = dataCache.valArray.indexOf(_val);
        final BigNestedIntArray nestedArray = dataCache._nestedArray;
        if(index < 0)
        {
            return EmptyDocIdSet.getInstance();
        }
        else
        {
            return new RandomAccessDocIdSet()
            {
                @Override
                public DocIdSetIterator iterator()
                {
                    return new MultiValueFacetDocIdSetIterator(dataCache, index);
                }
            @Override
            final public boolean get(int docId)
            {
              return nestedArray.contains(docId, index);
            }
               
            };
        }
    }

}
TOP

Related Classes of com.browseengine.bobo.facets.filter.MultiValueFacetFilter$MultiValueFacetDocIdSetIterator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.