Example usage for org.apache.lucene.search.spans SpanPositionRangeQuery SpanPositionRangeQuery

List of usage examples for org.apache.lucene.search.spans SpanPositionRangeQuery SpanPositionRangeQuery

Introduction

In this page you can find the example usage for org.apache.lucene.search.spans SpanPositionRangeQuery SpanPositionRangeQuery.

Prototype

public SpanPositionRangeQuery(SpanQuery match, int start, int end) 

Source Link

Usage

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;
}