Package com.senseidb.search.query

Source Code of com.senseidb.search.query.TimeRetentionFilter

/**
* This software is licensed to you under the Apache License, Version 2.0 (the
* "Apache License").
*
* LinkedIn's contributions are made under the Apache License. If you contribute
* to the Software, the contributions will be deemed to have been made under the
* Apache License, unless you expressly indicate otherwise. Please do not make any
* contributions that would be inconsistent with the Apache License.
*
* You may obtain a copy of the Apache License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, this software
* distributed under the Apache License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache
* License for the specific language governing permissions and limitations for the
* software governed under the Apache License.
*
* © 2012 LinkedIn Corp. All Rights Reserved. 
*/
package com.senseidb.search.query;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.Filter;

import proj.zoie.api.ZoieIndexReader;

import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.api.BrowseSelection;
import com.browseengine.bobo.facets.FacetHandler;
import com.kamikaze.docidset.impl.OrDocIdSet;
import com.senseidb.indexing.DefaultSenseiInterpreter;
import com.senseidb.indexing.MetaType;

public class TimeRetentionFilter extends Filter {

  private final String _column;
  private final int _nDays;
  private final TimeUnit _dataUnit;

  static{
    DefaultSenseiInterpreter.DEFAULT_FORMAT_STRING_MAP.get(MetaType.Long);
  }

  public TimeRetentionFilter(String column,int nDays,TimeUnit dataUnit){
    _column = column;
    _nDays = nDays;
    _dataUnit = dataUnit;
  }

  private DocIdSet buildFilterSet(BoboIndexReader boboReader) throws IOException{
    FacetHandler facetHandler = boboReader.getFacetHandler(_column);

    if (facetHandler!=null){
      DecimalFormat formatter = new DecimalFormat(DefaultSenseiInterpreter.DEFAULT_FORMAT_STRING_MAP.get(MetaType.Long));
      BrowseSelection sel = new BrowseSelection(_column);
      long duration = _dataUnit.convert(_nDays, TimeUnit.DAYS);
      long now = _dataUnit.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
      long from = now - duration;
      sel.addValue("["+formatter.format(from)+" TO *]");
      return facetHandler.buildFilter(sel).getDocIdSet(boboReader);
    }
    throw new IllegalStateException("no facet handler defined with column: "+_column);
  }

  @Override
  public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
    if (reader instanceof ZoieIndexReader){
      ZoieIndexReader<BoboIndexReader> zoieReader = (ZoieIndexReader<BoboIndexReader>)reader;
      List<BoboIndexReader> decorated = zoieReader.getDecoratedReaders();


      List<DocIdSet> docIdSetList = new ArrayList<DocIdSet>(decorated.size());
      for (BoboIndexReader bobo : decorated){
        docIdSetList.add(buildFilterSet(bobo));

      }
      return new OrDocIdSet(docIdSetList);
    }
    else{
      throw new IllegalStateException("reader not instance of "+ZoieIndexReader.class);
    }
  }

}
TOP

Related Classes of com.senseidb.search.query.TimeRetentionFilter

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.