Package org.apache.lucene.analysis.extendsQuery

Source Code of org.apache.lucene.analysis.extendsQuery.SelectInListQuery

package org.apache.lucene.analysis.extendsQuery;

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.FilteredTermEnum;
import org.apache.lucene.search.MultiTermQuery;
import org.apache.lucene.util.ToStringUtils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

//http://hdphadoop:8983/solr/select/?q=user_id%3A2*&version=2.2&start=0&rows=100&indent=on&fq={!infile%20f=user_id}/data/testdata/filein
public class SelectInListQuery <A> extends MultiTermQuery {
    private static final long serialVersionUID = 1L;
    private String field;
    private String file;
    private TransType<A> trans;
   
    public static interface TransType<A>{
  public A trans(String str);
    }
   
    public static class TransLong implements TransType<Long>
    {
        public Long trans(String str) {
      return Long.parseLong(str);
        }
    }
   
    public static class TransString implements TransType<String>
    {
        public String trans(String str) {
      return str;
        }
    }

    public SelectInListQuery(String file, String field,TransType<A> trans) {
  this.field = field;
  this.file = file;
  this.trans=trans;
    }
   
    public static class ListTermEnum<A> extends FilteredTermEnum {
  private maxminPair<Term> maxmincmp;
  private Set<A> list;
  private boolean endEnum = false;
  private String field;
  private Term maxTerm;
  private TransType<A> trans;


  public ListTermEnum(IndexReader reader, Set<A> list, String field,TransType<A> trans)
          throws IOException {
    this.trans=trans;

      this.maxmincmp = this.TermMaxMin(field,list);
      this.list = list;
      this.field=field;
      Term start=this.maxmincmp.getMin();
      this.maxTerm=this.maxmincmp.getMax();
      this.setEnum(reader.terms(start));
     
     
  }

  @Override
  protected boolean termCompare(Term term) {
      if (term.field().equals(this.field) &&list.contains(this.trans.trans(term.text())) ) {                                                                             
     return true;
      }
     
      if(term.compareTo(this.maxTerm)>0)
      {
        endEnum = true;
      }
      return false;
  }

  @Override
  public float difference() {
      return 1.0f;
  }

  @Override
  protected boolean endEnum() {
      return endEnum;
  }

  public static class maxminPair<T> {
      private T max;
      private T min;

      public T getMax() {
    return max;
      }

      public T getMin() {
    return min;
      }

      public maxminPair(T max, T min) {
    super();
    this.max = max;
    this.min = min;
      }
  }

  public <T> maxminPair<Term> TermMaxMin(String fields,
          Collection<? extends T> coll) {
      Iterator<? extends T> i = coll.iterator();
      Term first=new Term(fields,String.valueOf(i.next()));
      Term max=first;
      Term min = first;
      while (i.hasNext()) {
       Term next=new Term(fields,String.valueOf(i.next()));
    if (next.compareTo(max) > 0) {
        max = next;
    } else if (next.compareTo(min) < 0) {
        min = next;
    }
      }
      return new maxminPair<Term>(max, min);
  }
    }

    @Override
    protected FilteredTermEnum getEnum(IndexReader reader) throws IOException {
 
      Set<A> inlist = new HashSet<A>();
      FileReader freader;

      freader = new FileReader(file);

      BufferedReader br = new BufferedReader(freader);
      String s1 = null;
      while ((s1 = br.readLine()) != null) {
    inlist.add(this.trans.trans(s1));
      }
      br.close();
      freader.close();
 
 
  return new ListTermEnum<A>(reader,inlist, this.field,this.trans);
    }



    @Override
    public int hashCode() {
  final int prime = 31;
  int result = super.hashCode();
  result = prime * result + ((file == null) ? 0 : file.hashCode());
  result = prime * result + ((field == null) ? 0 : field.hashCode());
  return result;
    }

    @Override
    public boolean equals(Object obj) {
  if (this == obj)
      return true;
  if (!super.equals(obj))
      return false;
  if (getClass() != obj.getClass())
      return false;
  SelectInListQuery other = (SelectInListQuery) obj;
  if (file == null) {
      if (other.file != null)
    return false;
  } else if (!file.equals(other.file))
      return false;
  if (field == null) {
      if (other.field != null)
    return false;
  } else if (!field.equals(other.field))
      return false;
  return true;
    }

    @Override
    public String toString() {
  return "SelectInListQuery [term=" + field + ", file=" + file
          + ", hashcode=" + file.hashCode() + "]";
    }

    @Override
    public String toString(String field) {
  StringBuilder buffer = new StringBuilder();
  if (!this.field.equals(field)) {
      buffer.append(this.field);
      buffer.append(":");
  }
  buffer.append(this.toString());
  buffer.append(ToStringUtils.boost(getBoost()));
  return buffer.toString();
    }
   
   
//    public static class ListEnum extends TermEnum {
//   private List<String> list;
//   private Term term;
//   private Integer index = 0;
//
//   public ListEnum(List<String> list, Term term) {
//       this.list = list;
//       this.term = term;
//   }
//
//   @Override
//   public boolean next() throws IOException {
//       this.index++;
//       if (this.index >= this.list.size()) {
//     return false;
//       }
//       return true;
//   }
//
//   @Override
//   public Term term() {
//       String termstr=list.get(this.index);
//       return new Term(this.term.field(), termstr);
//   }
//
//   @Override
//   public int docFreq() {
//       return 1;
//   }
//
//   @Override
//   public void close() throws IOException {
//   }
//     }

}
TOP

Related Classes of org.apache.lucene.analysis.extendsQuery.SelectInListQuery

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.