package com.tyndalehouse.step.core.service.impl.suggestion; import com.tyndalehouse.step.core.data.EntityIndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Filter; import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import java.util.List; /** * @author chrisburrell */ public abstract class FieldBasedMeaningSuggestionServiceImpl extends AbstractAncientSuggestionServiceImpl { public FieldBasedMeaningSuggestionServiceImpl(final EntityIndexReader reader, final Filter filter, final Sort sort, final Sort popularSort) { super(reader, filter, sort, popularSort); } @Override protected BooleanQuery getQuery(final String input, final boolean exact) { final BooleanQuery masterQuery = new BooleanQuery(); final String[] fields = getFields(); for (int jj = 0; jj < fields.length; jj++) { final List<String> tokenItems = this.getReader().getAnalyzedTokens(fields[jj], input, true); for (int ii = 0; ii < tokenItems.size(); ii++) { final Term term = new Term(fields[jj], tokenItems.get(ii)); final Query clause = getExactOrPrefixQuery(exact, term); masterQuery.add(new BooleanClause(clause, BooleanClause.Occur.SHOULD)); } } return masterQuery; } public abstract String[] getFields(); }