use of com.tyndalehouse.step.core.exceptions.StepInternalException in project step by STEPBible.
the class EntityIndexReaderImpl method search.
@Override
public EntityDoc[] search(final Query query) {
final AllResultsCollector collector = new AllResultsCollector();
try {
LOGGER.debug("Search query is [{}], with filter [{}]", query);
this.searcher.search(query, collector);
return extractDocIds(collector);
} catch (final IOException e) {
throw new StepInternalException("Unable to search", e);
}
}
use of com.tyndalehouse.step.core.exceptions.StepInternalException in project step by STEPBible.
the class EntityIndexReaderImpl method extractDocIds.
/**
* Extracts all the results
*
* @param results the results that have been collected
* @return the results
*/
private EntityDoc[] extractDocIds(final TopDocs results) {
try {
final ScoreDoc[] scoreDocs = results.scoreDocs;
final EntityDoc[] docs = new EntityDoc[scoreDocs.length];
for (int ii = 0; ii < scoreDocs.length; ii++) {
docs[ii] = new EntityDoc(this.searcher.doc(scoreDocs[ii].doc));
}
return docs;
} catch (final IOException e) {
throw new StepInternalException("Unable to extract results", e);
}
}
use of com.tyndalehouse.step.core.exceptions.StepInternalException in project step by STEPBible.
the class EntityIndexReaderImpl method getAnalyzedTokens.
@Override
public List<String> getAnalyzedTokens(final String fieldName, final String input, boolean escapeToken) {
final TokenStream tokens = this.getAnalyzer().tokenStream(fieldName, new StringReader(input));
// construct query to search for both stepGloss and translations - the last word gets a trailing wildcard
// query will be in the form of +(gloss:a trans:a) +(gloss:b* trans:b*) +strong:H*
List<String> tokenItems = new ArrayList<String>(2);
try {
tokens.reset();
TermAttribute termAttribute = tokens.getAttribute(TermAttribute.class);
while (tokens.incrementToken()) {
String term = termAttribute.term();
if (escapeToken) {
term = QueryParser.escape(term);
}
tokenItems.add(term);
}
} catch (IOException e) {
throw new StepInternalException("Unable to parse query", e);
} finally {
try {
tokens.end();
tokens.close();
} catch (IOException e) {
LOGGER.trace("Unable to properly close stream.");
}
}
return tokenItems;
}
use of com.tyndalehouse.step.core.exceptions.StepInternalException in project step by STEPBible.
the class EntityIndexReaderImpl method search.
@Override
public EntityDoc[] search(final Query query, final int max, final Sort sortField, final Filter filter) {
LOGGER.debug("Search query is [{}]", query);
try {
final TopDocs search;
if (sortField != null) {
search = this.searcher.search(query, filter, max, sortField);
} else {
search = this.searcher.search(query, filter, max);
}
final EntityDoc[] results = new EntityDoc[search.scoreDocs.length];
for (int ii = 0; ii < search.scoreDocs.length; ii++) {
results[ii] = new EntityDoc(this.searcher.doc(search.scoreDocs[ii].doc));
}
return results;
} catch (final IOException e) {
throw new StepInternalException("Failed to search", e);
}
}
use of com.tyndalehouse.step.core.exceptions.StepInternalException in project step by STEPBible.
the class EntityIndexReaderImpl method search.
// CHECKSTYLE:OFF
@Override
public EntityDoc[] search(final String[] fieldNames, final String value, final Filter filter, final Sort sort, final boolean analyzePrefix, final String queryRemainder, final Integer maxResults, final boolean useOrOperatorBetweenValues) {
// CHECKSTYLE:ON
final AllResultsCollector collector = new AllResultsCollector();
Query parsed = null;
QueryParser parser;
if (analyzePrefix) {
parser = new AnalyzedPrefixSearchQueryParser(LUCENE_30, fieldNames, this.config.getAnalyzerInstance());
} else {
parser = new MultiFieldQueryParser(LUCENE_30, fieldNames, this.config.getAnalyzerInstance());
}
parser.setDefaultOperator(useOrOperatorBetweenValues ? Operator.OR : Operator.AND);
try {
if (queryRemainder != null) {
final StringBuilder sb = new StringBuilder(value.length() + queryRemainder.length() + 1);
sb.append(value);
sb.append(' ');
sb.append(queryRemainder);
parsed = parser.parse(sb.toString());
} else {
parsed = parser.parse(value);
}
LOGGER.debug("Search query is [{}]", parsed);
if (sort != null) {
final TopFieldDocs search = this.searcher.search(parsed, filter, maxResults == null ? Integer.MAX_VALUE : maxResults, sort);
return extractDocIds(search);
} else {
this.searcher.search(parsed, filter, collector);
return extractDocIds(collector);
}
} catch (final ParseException e) {
throw new StepInternalException("Unable to parse query", e);
} catch (final IOException e) {
throw new StepInternalException("Unable to search given query: " + parsed != null ? parsed.toString() : "<unknown>", e);
}
}
Aggregations