Example usage for org.apache.lucene.search PhraseQuery getSlop

List of usage examples for org.apache.lucene.search PhraseQuery getSlop

Introduction

In this page you can find the example usage for org.apache.lucene.search PhraseQuery getSlop.

Prototype

public int getSlop() 

Source Link

Document

Return the slop for this PhraseQuery .

Usage

From source file:com.jaeksoft.searchlib.snippet.SnippetQueries.java

License:Open Source License

private final void parse(final PhraseQuery query) {
    Term[] terms = query.getTerms();//from w w w . j a  va2 s  .  c  o  m
    if (terms == null)
        return;

    List<Integer> termPosSequence = new ArrayList<Integer>(terms.length);
    for (Term term : terms) {
        if (!field.equals(term.field()))
            continue;
        int pos = checkTerm(term.text());
        termPosSequence.add(pos);
        termPhraseSet.add(pos);
    }
    // Term sequences with one term are not phrase queries
    if (termPosSequence.size() <= 1)
        return;
    termSequenceList.add(new TermSequence(termPosSequence, query.getSlop()));
}

From source file:com.o19s.solr.swan.highlight.SpanAwareFieldQuery.java

License:Apache License

private void checkOverlap(Collection<Query> expandQueries, PhraseQuery a, PhraseQuery b) {
    if (a.getSlop() != b.getSlop())
        return;/*from   w  w w  .j  ava 2  s  . c  om*/
    Term[] ats = a.getTerms();
    Term[] bts = b.getTerms();
    if (fieldMatch && !ats[0].field().equals(bts[0].field()))
        return;
    checkOverlap(expandQueries, ats, bts, a.getSlop(), a.getBoost());
    checkOverlap(expandQueries, bts, ats, b.getSlop(), b.getBoost());
}

From source file:com.stratio.cassandra.index.query.PhraseConditionTest.java

License:Apache License

@Test
public void testPhraseQuery() {

    Map<String, ColumnMapper<?>> map = new HashMap<>();
    map.put("name", new ColumnMapperBoolean());
    Schema mappers = new Schema(EnglishAnalyzer.class.getName(), map);

    List<String> values = new ArrayList<>();
    values.add("hola");
    values.add("adios");

    PhraseCondition phraseCondition = new PhraseCondition(0.5f, "name", values, 2);
    Query query = phraseCondition.query(mappers);
    Assert.assertNotNull(query);/*  w  ww  .jav  a  2 s .  co m*/
    Assert.assertEquals(org.apache.lucene.search.PhraseQuery.class, query.getClass());
    org.apache.lucene.search.PhraseQuery luceneQuery = (org.apache.lucene.search.PhraseQuery) query;
    Assert.assertEquals(values.size(), luceneQuery.getTerms().length);
    Assert.assertEquals(2, luceneQuery.getSlop());
    Assert.assertEquals(0.5f, query.getBoost(), 0);
}

From source file:com.stratio.cassandra.lucene.search.condition.PhraseConditionTest.java

License:Apache License

@Test
public void testPhraseQuery() {

    Schema schema = mockSchema("name", new TextMapper("name", true, true, "spanish"), "spanish");

    String value = "hola adios  the    a";
    PhraseCondition condition = new PhraseCondition(0.5f, "name", value, 2);
    Query query = condition.query(schema);
    assertNotNull(query);/*from   w w  w  .  j  a  v  a  2  s  .c  o m*/
    assertEquals(PhraseQuery.class, query.getClass());
    PhraseQuery luceneQuery = (PhraseQuery) query;
    assertEquals(3, luceneQuery.getTerms().length);
    assertEquals(2, luceneQuery.getSlop());
    assertEquals(0.5f, query.getBoost(), 0);
}

From source file:edu.mit.ll.vizlinc.highlight.WeightedSpanTermExtractor.java

License:Apache License

/**
 * Fills a <code>Map</code> with <@link WeightedSpanTerm>s using the terms from the supplied <code>Query</code>.
 * /*from  w w w.j  ava  2  s . co  m*/
 * @param query
 *          Query to extract Terms from
 * @param terms
 *          Map to place created WeightedSpanTerms in
 * @throws IOException
 */
private void extract(Query query, Map<String, WeightedSpanTerm> terms) throws IOException {
    if (query instanceof BooleanQuery) {
        BooleanClause[] queryClauses = ((BooleanQuery) query).getClauses();

        for (int i = 0; i < queryClauses.length; i++) {
            if (!queryClauses[i].isProhibited()) {
                extract(queryClauses[i].getQuery(), terms);
            }
        }
    } else if (query instanceof PhraseQuery) {
        PhraseQuery phraseQuery = ((PhraseQuery) query);
        Term[] phraseQueryTerms = phraseQuery.getTerms();
        SpanQuery[] clauses = new SpanQuery[phraseQueryTerms.length];
        for (int i = 0; i < phraseQueryTerms.length; i++) {
            clauses[i] = new SpanTermQuery(phraseQueryTerms[i]);
        }
        int slop = phraseQuery.getSlop();
        int[] positions = phraseQuery.getPositions();
        // add largest position increment to slop
        if (positions.length > 0) {
            int lastPos = positions[0];
            int largestInc = 0;
            int sz = positions.length;
            for (int i = 1; i < sz; i++) {
                int pos = positions[i];
                int inc = pos - lastPos;
                if (inc > largestInc) {
                    largestInc = inc;
                }
                lastPos = pos;
            }
            if (largestInc > 1) {
                slop += largestInc;
            }
        }

        boolean inorder = false;

        if (slop == 0) {
            inorder = true;
        }

        SpanNearQuery sp = new SpanNearQuery(clauses, slop, inorder);
        sp.setBoost(query.getBoost());
        extractWeightedSpanTerms(terms, sp);
    } else if (query instanceof TermQuery) {
        extractWeightedTerms(terms, query);
    } else if (query instanceof SpanQuery) {
        extractWeightedSpanTerms(terms, (SpanQuery) query);
    } else if (query instanceof FilteredQuery) {
        extract(((FilteredQuery) query).getQuery(), terms);
    } else if (query instanceof DisjunctionMaxQuery) {
        for (Iterator<Query> iterator = ((DisjunctionMaxQuery) query).iterator(); iterator.hasNext();) {
            extract(iterator.next(), terms);
        }
    } else if (query instanceof MultiTermQuery && expandMultiTermQuery) {
        MultiTermQuery mtq = ((MultiTermQuery) query);
        if (mtq.getRewriteMethod() != MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) {
            mtq = (MultiTermQuery) mtq.clone();
            mtq.setRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
            query = mtq;
        }
        FakeReader fReader = new FakeReader();
        MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE.rewrite(fReader, mtq);
        if (fReader.field != null) {
            IndexReader ir = getReaderForField(fReader.field);
            extract(query.rewrite(ir), terms);
        }
    } else if (query instanceof MultiPhraseQuery) {
        final MultiPhraseQuery mpq = (MultiPhraseQuery) query;
        final List<Term[]> termArrays = mpq.getTermArrays();
        final int[] positions = mpq.getPositions();
        if (positions.length > 0) {

            int maxPosition = positions[positions.length - 1];
            for (int i = 0; i < positions.length - 1; ++i) {
                if (positions[i] > maxPosition) {
                    maxPosition = positions[i];
                }
            }

            @SuppressWarnings("unchecked")
            final List<SpanQuery>[] disjunctLists = new List[maxPosition + 1];
            int distinctPositions = 0;

            for (int i = 0; i < termArrays.size(); ++i) {
                final Term[] termArray = termArrays.get(i);
                List<SpanQuery> disjuncts = disjunctLists[positions[i]];
                if (disjuncts == null) {
                    disjuncts = (disjunctLists[positions[i]] = new ArrayList<SpanQuery>(termArray.length));
                    ++distinctPositions;
                }
                for (int j = 0; j < termArray.length; ++j) {
                    disjuncts.add(new SpanTermQuery(termArray[j]));
                }
            }

            int positionGaps = 0;
            int position = 0;
            final SpanQuery[] clauses = new SpanQuery[distinctPositions];
            for (int i = 0; i < disjunctLists.length; ++i) {
                List<SpanQuery> disjuncts = disjunctLists[i];
                if (disjuncts != null) {
                    clauses[position++] = new SpanOrQuery(disjuncts.toArray(new SpanQuery[disjuncts.size()]));
                } else {
                    ++positionGaps;
                }
            }

            final int slop = mpq.getSlop();
            final boolean inorder = (slop == 0);

            SpanNearQuery sp = new SpanNearQuery(clauses, slop + positionGaps, inorder);
            sp.setBoost(query.getBoost());
            extractWeightedSpanTerms(terms, sp);
        }
    }
}

From source file:it.unibz.instasearch.indexing.querying.LowercaseConverter.java

License:Open Source License

@Override
public Query visit(PhraseQuery phraseQuery) {
    PhraseQuery newQuery = new PhraseQuery();

    for (Term term : phraseQuery.getTerms()) {
        Field field = Field.getByName(term.field());
        if (field != Field.CONTENTS)
            return phraseQuery;

        Term newTerm = Field.CONTENTS.createTerm(term.text().toLowerCase());
        newQuery.add(newTerm);/*from   w w w. j av a  2  s  .c o m*/
    }

    newQuery.setSlop(phraseQuery.getSlop());
    newQuery.setBoost(phraseQuery.getBoost());

    return newQuery;
}

From source file:org.apache.blur.utils.HighlightHelper.java

License:Apache License

private static Query setFieldIfNeeded(Query query, String name, String fieldLessFieldName) {
    if (name == null) {
        return query;
    }//  w  w  w .  j  a  v  a  2s. c  o m
    if (query instanceof TermQuery) {
        TermQuery tq = (TermQuery) query;
        Term term = tq.getTerm();
        if (term.field().equals(fieldLessFieldName)) {
            return new TermQuery(new Term(name, term.bytes()));
        }
    } else if (query instanceof WildcardQuery) {
        WildcardQuery wq = (WildcardQuery) query;
        Term term = wq.getTerm();
        if (term.field().equals(fieldLessFieldName)) {
            return new WildcardQuery(new Term(name, term.bytes()));
        }
    } else if (query instanceof MultiPhraseQuery) {
        MultiPhraseQuery mpq = (MultiPhraseQuery) query;
        int[] positions = mpq.getPositions();
        List<Term[]> termArrays = mpq.getTermArrays();
        if (isTermField(termArrays, fieldLessFieldName)) {
            MultiPhraseQuery multiPhraseQuery = new MultiPhraseQuery();
            multiPhraseQuery.setSlop(mpq.getSlop());
            for (int i = 0; i < termArrays.size(); i++) {
                multiPhraseQuery.add(changeFields(termArrays.get(i), name), positions[i]);
            }
            return multiPhraseQuery;
        }
    } else if (query instanceof PhraseQuery) {
        PhraseQuery pq = (PhraseQuery) query;
        Term[] terms = pq.getTerms();
        int[] positions = pq.getPositions();
        String field = terms[0].field();
        if (field.equals(BlurConstants.SUPER)) {
            PhraseQuery phraseQuery = new PhraseQuery();
            for (int i = 0; i < terms.length; i++) {
                phraseQuery.add(new Term(name, terms[i].bytes()), positions[i]);
            }
            phraseQuery.setSlop(pq.getSlop());
            return phraseQuery;
        }
    } else if (query instanceof PrefixQuery) {
        PrefixQuery pq = (PrefixQuery) query;
        Term term = pq.getPrefix();
        if (term.field().equals(BlurConstants.SUPER)) {
            return new PrefixQuery(new Term(name, term.bytes()));
        }
    } else if (query instanceof TermRangeQuery) {
        TermRangeQuery trq = (TermRangeQuery) query;
        BytesRef lowerTerm = trq.getLowerTerm();
        BytesRef upperTerm = trq.getUpperTerm();
        boolean includeUpper = trq.includesUpper();
        boolean includeLower = trq.includesLower();
        String field = trq.getField();
        if (field.equals(BlurConstants.SUPER)) {
            return new TermRangeQuery(name, lowerTerm, upperTerm, includeLower, includeUpper);
        }
    }
    return query;
}

From source file:org.elasticsearch.action.debugquery.QueryToMapTransformer.java

License:Apache License

@Override
public Map visit(PhraseQuery query) throws Exception {
    final Map map = newQuery(query);
    map.put("slop", query.getSlop());
    final Term[] terms = query.getTerms();
    final ArrayList termsLst = new ArrayList(terms.length);
    map.put("terms", termsLst);
    for (final Term term : terms) {
        final Map<String, Object> termMap = new LinkedHashMap<>();
        termMap.put(getTermField(term), term.bytes().utf8ToString());
        termsLst.add(termMap);/*from ww w .  j a va 2 s . c om*/
    }
    return map;
}

From source file:org.elasticsearch.index.query.QueryStringQueryBuilderTests.java

License:Apache License

public void testToQueryPhraseQuery() throws IOException {
    assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
    Query query = queryStringQuery("\"term1 term2\"").defaultField(STRING_FIELD_NAME).phraseSlop(3)
            .toQuery(createShardContext());
    assertThat(query, instanceOf(DisjunctionMaxQuery.class));
    DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) query;
    assertThat(disjunctionMaxQuery.getDisjuncts().size(), equalTo(1));
    assertThat(disjunctionMaxQuery.getDisjuncts().get(0), instanceOf(PhraseQuery.class));
    PhraseQuery phraseQuery = (PhraseQuery) disjunctionMaxQuery.getDisjuncts().get(0);
    assertThat(phraseQuery.getTerms().length, equalTo(2));
    assertThat(phraseQuery.getTerms()[0], equalTo(new Term(STRING_FIELD_NAME, "term1")));
    assertThat(phraseQuery.getTerms()[1], equalTo(new Term(STRING_FIELD_NAME, "term2")));
    assertThat(phraseQuery.getSlop(), equalTo(3));
}

From source file:org.elasticsearch.index.query.QueryStringQueryBuilderTests.java

License:Apache License

public void testToQueryPhraseQueryBoostAndSlop() throws IOException {
    assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
    QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder("\"test phrase\"~2")
            .field(STRING_FIELD_NAME, 5f);
    Query query = queryStringQueryBuilder.toQuery(createShardContext());
    assertThat(query, instanceOf(DisjunctionMaxQuery.class));
    DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) query;
    assertThat(disjunctionMaxQuery.getDisjuncts().size(), equalTo(1));
    assertThat(disjunctionMaxQuery.getDisjuncts().get(0), instanceOf(BoostQuery.class));
    BoostQuery boostQuery = (BoostQuery) disjunctionMaxQuery.getDisjuncts().get(0);
    assertThat(boostQuery.getBoost(), equalTo(5f));
    assertThat(boostQuery.getQuery(), instanceOf(PhraseQuery.class));
    PhraseQuery phraseQuery = (PhraseQuery) boostQuery.getQuery();
    assertThat(phraseQuery.getSlop(), Matchers.equalTo(2));
    assertThat(phraseQuery.getTerms().length, equalTo(2));
}