ZhaoQueryBuilder.java 4.56 KB
package com.zhaoonline.common.es;

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

import org.elasticsearch.index.query.QueryBuilders;

import com.zhaoonline.common.es.bean.QueryInt;
import com.zhaoonline.common.es.bean.SortOrder;
import com.zhaoonline.common.es.bean.SortQueryBean;

public class ZhaoQueryBuilder {
	
	private List<String> fields =new ArrayList<String>();
	
	private List<QueryInt> andQuery=new ArrayList<QueryInt>();
	
	private List<QueryInt> orQuery=new ArrayList<QueryInt>();
	
	private List<QueryInt> notQuery=new ArrayList<QueryInt>();
	
	private List<SortQueryBean> sortQuerys=new ArrayList<SortQueryBean>();
	
	private Page page =new Page();
	
	private ZhaoQueryParser parser=null;
	public ZhaoQueryBuilder(){
		this.parser=new ZhaoBooleanFilterQuery();
	}
	
	public ZhaoQueryBuilder(ZhaoQueryParser parser){
		this.parser=parser;
	}
	
	public ZhaoQueryBuilder addFiled(String field){
		fields.add(field);
		return this;
	}
	
	public void setPage(int start,int size){
		page=new Page();
		page.setSize(size);
		page.setStart(start);
	}
	
	public void and(QueryInt... querys){
		for(QueryInt tq:querys){
			andQuery.add(tq);
		}
	}
	
	public void or(QueryInt... querys){
		for(QueryInt tq:querys){
			orQuery.add(tq);
		}
	}
	public void not(QueryInt... querys){
		for(QueryInt tq:querys){
			notQuery.add(tq);
		}
	}
	
	public void addSortOrder(String sortKey,SortOrder order){
		sortQuerys.add(new SortQueryBean(sortKey,order));
	}
	
	public String toQueryString(){
		StringBuilder query=new StringBuilder();
		query.append("{");
		String pageString=toPageString();
		
		if(pageString !=null){
			query.append(pageString);
			query.append(",");
		}
	
		String fieldsString=toFieldsString();
		if(fieldsString != null){
			query.append(fieldsString);
			query.append(",");
		}
		String interQueryString = toRawQueryString(query);
		query.append("\"query\":");
		if(interQueryString !=null){
			query.append(interQueryString);
		}else{
			query.append(QueryBuilders.matchAllQuery());
		}
		String sortString=toSortString();
		if(sortString != null){
			query.append(",");
			query.append(sortString);
		}
		
		query.append("}");
		
		return query.toString();
	}
	

	private String toRawQueryString(StringBuilder query) {
		String interQueryString=parser.parse(this);
		return interQueryString;
	}
	
	public String toSortString() {
		if(sortQuerys!=null && sortQuerys.size() !=0){
			StringBuilder builder=new StringBuilder();
			builder.append("\"sort\":").append("[");
			Iterator<SortQueryBean> itr=sortQuerys.iterator();
			while(itr.hasNext()){
				SortQueryBean field=itr.next();
				builder.append("{").append("\"").append(field.getSortKey()).append("\"").append(":").append("\"").append(field.getSortOrder().getValue()).append("\"").append("}");
				if(itr.hasNext()){
					builder.append(",");
				}
			}
			builder.append("]");
			return builder.toString();
		}
		return null;
	}

	public String toFieldsString(){
		if(fields!=null && fields.size() !=0){
			StringBuilder builder=new StringBuilder();
			builder.append("\"fields\":").append("[");
			Iterator<String> itr=fields.iterator();
			while(itr.hasNext()){
				String field=itr.next();
				builder.append("\"").append(field).append("\"");
				if(itr.hasNext()){
					builder.append(",");
				}
			}
			builder.append("]");
			return builder.toString();
		}
		return null;
	}

	
	public String toPageString(){
		
		if(page != null){
			StringBuilder builder=new StringBuilder();
			builder.append("\"from\":").append(page.getStart());
			builder.append(",");
			builder.append("\"size\":").append(page.getSize());
			return builder.toString();
		}
		return null;
		
	}
	
	
	public List<String> getFields() {
		return fields;
	}

	public void setFields(List<String> fields) {
		this.fields = fields;
	}

	public List<QueryInt> getAndQuery() {
		return andQuery;
	}

	public void setAndQuery(List<QueryInt> andQuery) {
		this.andQuery = andQuery;
	}

	public List<QueryInt> getOrQuery() {
		return orQuery;
	}

	public void setOrQuery(List<QueryInt> orQuery) {
		this.orQuery = orQuery;
	}

	public List<QueryInt> getNotQuery() {
		return notQuery;
	}

	public void setNotQuery(List<QueryInt> notQuery) {
		this.notQuery = notQuery;
	}

	public List<SortQueryBean> getSortQuerys() {
		return sortQuerys;
	}

	public void setSortQuerys(List<SortQueryBean> sortQuerys) {
		this.sortQuerys = sortQuerys;
	}

	public Page getPage() {
		return page;
	}

	public void setPage(Page page) {
		this.page = page;
	}

	public ZhaoQueryParser getParser() {
		return parser;
	}

	public void setParser(ZhaoQueryParser parser) {
		this.parser = parser;
	}
	
	
}