/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.query.factory; import org.elasticsearch.index.query.FilterBuilders; import org.elasticsearch.index.query.MissingFilterBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import com.enonic.cms.core.search.IndexType; import com.enonic.cms.core.search.query.QueryFieldAndValue; import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; public class TermQueryBuilderFactory extends BaseQueryBuilderFactory { public QueryBuilder buildTermQuery( final QueryFieldAndValue queryFieldAndValue ) { final QueryBuilder termQuery = doBuildTermQuery( queryFieldAndValue ); if ( queryFieldAndValue.doRenderAsHasChildQuery() ) { return wrapInHasChildQuery( queryFieldAndValue, termQuery ); } else { return termQuery; } } private QueryBuilder doBuildTermQuery( final QueryFieldAndValue queryFieldAndValue ) { if ( queryFieldAndValue.doBuildAsIdQuery() ) { return buildAsIdQuery( queryFieldAndValue ); } if ( queryFieldAndValue.doBuildAsEmptyDateFieldQuery() ) { MissingFilterBuilder filter = FilterBuilders.missingFilter( queryFieldAndValue.getFieldName() ); return QueryBuilders.filteredQuery( matchAllQuery(), filter ); } return QueryBuilders.termQuery( queryFieldAndValue.getFieldName(), queryFieldAndValue.getValue() ); } private QueryBuilder buildAsIdQuery( final QueryFieldAndValue queryFieldAndValue ) { return QueryBuilders.idsQuery( IndexType.Content.toString() ).addIds( queryFieldAndValue.getValueForIdQuery() ); } }