@Override public String toString(String field) { StringBuilder buffer = new StringBuilder(); buffer.append("spanPosRange("); buffer.append(match.toString(field)); buffer.append(", ").append(start).append(", "); buffer.append(end); buffer.append(")"); buffer.append(ToStringUtils.boost(getBoost())); return buffer.toString(); }
@Override @JsonIgnore final public Query getQuery(final QueryContext queryContext) throws IOException { final BooleanQuery.Builder builder = new BooleanQuery.Builder(); final String resolvedField = resolveField(queryContext.getFieldMap()); try (final TokenStream tokenStream = queryContext.getQueryAnalyzer().tokenStream(resolvedField, query_string)) { final CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class); final 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(resolvedField, 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(); } }
@Override public String toString(String field) { StringBuilder buffer = new StringBuilder(); buffer.append("spanPosRange("); buffer.append(match.toString(field)); buffer.append(", ").append(start).append(", "); buffer.append(end); buffer.append(")"); buffer.append(ToStringUtils.boost(getBoost())); return buffer.toString(); }