/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.query.dsl.impl;
import org.apache.lucene.search.Query;
import org.hibernate.search.query.dsl.MoreLikeThisContext;
import org.hibernate.search.query.dsl.MoreLikeThisOpenedMatchingContext;
import org.hibernate.search.query.dsl.MoreLikeThisTerminalMatchingContext;
/**
* @author Emmanuel Bernard
*/
public class ConnectedMoreLikeThisContext implements MoreLikeThisContext {
private static final String[] ALL_FIELDS = new String[0];
private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
private final MoreLikeThisQueryContext moreLikeThisContext;
public ConnectedMoreLikeThisContext(QueryBuildingContext context) {
this.queryContext = context;
this.queryCustomizer = new QueryCustomizer();
this.moreLikeThisContext = new MoreLikeThisQueryContext();
}
@Override
public MoreLikeThisContext excludeEntityUsedForComparison() {
moreLikeThisContext.setExcludeEntityUsedForComparison( true );
return this;
}
@Override
public MoreLikeThisContext favorSignificantTermsWithFactor(float factor) {
moreLikeThisContext.setBoostTerms( true );
moreLikeThisContext.setTermBoostFactor( factor );
return this;
}
@Override
public MoreLikeThisTerminalMatchingContext comparingAllFields() {
return new ConnectedMoreLikeThisMatchingContext( ALL_FIELDS, moreLikeThisContext, queryCustomizer, queryContext );
}
@Override
public MoreLikeThisOpenedMatchingContext comparingFields(String... fieldNames) {
return new ConnectedMoreLikeThisMatchingContext( fieldNames, moreLikeThisContext, queryCustomizer, queryContext );
}
@Override
public MoreLikeThisOpenedMatchingContext comparingField(String fieldName) {
return new ConnectedMoreLikeThisMatchingContext(
new String[] {fieldName},
moreLikeThisContext,
queryCustomizer, queryContext );
}
@Override
public MoreLikeThisContext boostedTo(float boost) {
queryCustomizer.boostedTo( boost );
return this;
}
@Override
public MoreLikeThisContext withConstantScore() {
queryCustomizer.withConstantScore();
return this;
}
@Override
public MoreLikeThisContext filteredBy(Query filter) {
queryCustomizer.filteredBy( filter );
return this;
}
}