List of usage examples for org.apache.lucene.search.spans SpanPositionRangeQuery SpanPositionRangeQuery
public SpanPositionRangeQuery(SpanQuery match, int start, int end)
From source file:com.qwazr.search.query.SpanPositionsQuery.java
License:Apache License
@Override final public Query getQuery(QueryContext queryContext) throws IOException { BooleanQuery.Builder builder = new BooleanQuery.Builder(); TokenStream tokenStream = queryContext.analyzer.tokenStream(field, queryContext.queryString); try {/*from w w w. j ava2 s .co m*/ CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class); PositionIncrementAttribute pocincrAttribute = tokenStream .getAttribute(PositionIncrementAttribute.class); tokenStream.reset(); int pos = 0; while (tokenStream.incrementToken()) { final String charTerm = charTermAttribute.toString(); int start = pos - distance; if (start < 0) start = 0; final int end = pos + distance + 1; for (int i = start; i < end; i++) { final float dist = Math.abs(i - pos) + 1; final float boost = 1 / dist; final SpanTermQuery spanTermQuery = new SpanTermQuery(new Term(field, charTerm)); Query query = new BoostQuery(new SpanPositionRangeQuery(spanTermQuery, i, i + 1), boost); builder.add(new BooleanClause(query, BooleanClause.Occur.SHOULD)); } pos += pocincrAttribute.getPositionIncrement(); } return builder.build(); } finally { IOUtils.closeQuietly(tokenStream); } }
From source file:org.tallison.lucene.queryparser.spans.SpanQueryParserBase.java
License:Apache License
SpanQuery addBoostOrPositionRangeIfExists(SpanQuery spanQuery, SQPBoostableOrPositionRangeToken token) {
if (spanQuery == null) {
return spanQuery;
}//from w ww. j a v a 2 s . c o m
if (token.getStartPosition() != null || token.getEndPosition() != null) {
if (token.getStartPosition() == null) {
spanQuery = new SpanFirstQuery(spanQuery, token.getEndPosition());
} else {
int end = (token.getEndPosition() == null) ? Integer.MAX_VALUE : token.getEndPosition();
spanQuery = new SpanPositionRangeQuery(spanQuery, token.getStartPosition(), end);
}
}
if (token.getBoost() != null && !(spanQuery instanceof SpanBoostQuery)) {
spanQuery = new SpanBoostQuery(spanQuery, token.getBoost());
}
return spanQuery;
}