Example usage for org.apache.lucene.search BooleanQuery clauses

List of usage examples for org.apache.lucene.search BooleanQuery clauses

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanQuery clauses.

Prototype

List clauses

To view the source code for org.apache.lucene.search BooleanQuery clauses.

Click Source Link

Usage

From source file:io.crate.lucene.CommonQueryBuilderTest.java

License:Apache License

@Test
public void testEqOnTwoArraysBecomesGenericFunctionQuery() throws Exception {
    Query query = convert("y_array = [10, 20, 30]");
    assertThat(query, instanceOf(BooleanQuery.class));
    BooleanQuery booleanQuery = (BooleanQuery) query;
    assertThat(booleanQuery.clauses().get(0).getQuery(), instanceOf(PointInSetQuery.class));
    assertThat(booleanQuery.clauses().get(1).getQuery(), instanceOf(GenericFunctionQuery.class));
}

From source file:io.crate.lucene.CommonQueryBuilderTest.java

License:Apache License

@Test
public void testEqOnArrayWithTooManyClauses() throws Exception {
    Object[] values = new Object[2000]; // should trigger the TooManyClauses exception
    Arrays.fill(values, 10L);//from ww w . jav  a  2 s  . co m
    SqlExpressions sqlExpressions = new SqlExpressions(sources, new Object[] { values });
    Query query = convert(new WhereClause(expressions.normalize(sqlExpressions.asSymbol("y_array = ?"))));
    assertThat(query, instanceOf(BooleanQuery.class));
    BooleanQuery booleanQuery = (BooleanQuery) query;
    assertThat(booleanQuery.clauses().get(0).getQuery(), instanceOf(PointInSetQuery.class));
    assertThat(booleanQuery.clauses().get(1).getQuery(), instanceOf(GenericFunctionQuery.class));
}

From source file:io.crate.lucene.CommonQueryBuilderTest.java

License:Apache License

@Test
public void testLikeAnyOnArrayLiteral() throws Exception {
    Query likeQuery = convert("name like any (['a', 'b', 'c'])");
    assertThat(likeQuery, instanceOf(BooleanQuery.class));
    BooleanQuery likeBQuery = (BooleanQuery) likeQuery;
    assertThat(likeBQuery.clauses().size(), is(3));
    for (int i = 0; i < 2; i++) {
        // like --> ConstantScoreQuery with regexp-filter
        Query filteredQuery = likeBQuery.clauses().get(i).getQuery();
        assertThat(filteredQuery, instanceOf(WildcardQuery.class));
    }/*from   w  w  w.j  a  v a2  s .c  o  m*/
}

From source file:io.crate.lucene.CommonQueryBuilderTest.java

License:Apache License

@Test
public void testNotLikeAnyOnArrayLiteral() throws Exception {
    Query notLikeQuery = convert("name not like any (['a', 'b', 'c'])");
    assertThat(notLikeQuery, instanceOf(BooleanQuery.class));
    BooleanQuery notLikeBQuery = (BooleanQuery) notLikeQuery;
    assertThat(notLikeBQuery.clauses(), hasSize(2));
    BooleanClause clause = notLikeBQuery.clauses().get(1);
    assertThat(clause.getOccur(), is(BooleanClause.Occur.MUST_NOT));
    assertThat(((BooleanQuery) clause.getQuery()).clauses(), hasSize(3));
    for (BooleanClause innerClause : ((BooleanQuery) clause.getQuery()).clauses()) {
        assertThat(innerClause.getOccur(), is(BooleanClause.Occur.MUST));
        assertThat(innerClause.getQuery(), instanceOf(WildcardQuery.class));
    }/*from  www .j a  va 2  s  .c  om*/
}

From source file:io.crate.lucene.LuceneQueryBuilderTest.java

License:Apache License

@Test
public void testAnyOnArrayLiteral() throws Exception {
    Reference ref = createReference("d", DataTypes.STRING);
    Literal stringArrayLiteral = Literal.newLiteral(
            new Object[] { new BytesRef("a"), new BytesRef("b"), new BytesRef("c") },
            new ArrayType(DataTypes.STRING));

    Query neqQuery = convert("name != any (['a', 'b', 'c'])");
    assertThat(neqQuery, instanceOf(FilteredQuery.class));
    assertThat(((FilteredQuery) neqQuery).getFilter(), instanceOf(BooleanFilter.class));
    BooleanFilter filter = (BooleanFilter) ((FilteredQuery) neqQuery).getFilter();
    assertThat(filter.toString(), is("BooleanFilter(-BooleanFilter(+name:a +name:b +name:c))"));

    Query likeQuery = convert("name like any (['a', 'b', 'c'])");
    assertThat(likeQuery, instanceOf(BooleanQuery.class));
    BooleanQuery likeBQuery = (BooleanQuery) likeQuery;
    assertThat(likeBQuery.clauses().size(), is(3));
    for (int i = 0; i < 2; i++) {
        // like --> XConstantScoreQuery with regexp-filter
        Query filteredQuery = likeBQuery.clauses().get(i).getQuery();
        assertThat(filteredQuery, instanceOf(WildcardQuery.class));
    }/*from  www. j  a  va  2s. c  om*/

    Query notLikeQuery = convert("name not like any (['a', 'b', 'c'])");
    assertThat(notLikeQuery, instanceOf(BooleanQuery.class));
    BooleanQuery notLikeBQuery = (BooleanQuery) notLikeQuery;
    assertThat(notLikeBQuery.clauses(), hasSize(1));
    BooleanClause clause = notLikeBQuery.clauses().get(0);
    assertThat(clause.getOccur(), is(BooleanClause.Occur.MUST_NOT));
    assertThat(((BooleanQuery) clause.getQuery()).clauses(), hasSize(3));
    for (BooleanClause innerClause : ((BooleanQuery) clause.getQuery()).clauses()) {
        assertThat(innerClause.getOccur(), is(BooleanClause.Occur.MUST));
        assertThat(innerClause.getQuery(), instanceOf(WildcardQuery.class));
    }

    Query ltQuery2 = convert("name < any (['a', 'b', 'c'])");
    assertThat(ltQuery2, instanceOf(BooleanQuery.class));
    BooleanQuery ltBQuery = (BooleanQuery) ltQuery2;
    assertThat(ltBQuery.toString(), is("(name:{* TO a} name:{* TO b} name:{* TO c})~1"));
}

From source file:io.crate.operation.collect.collectors.LuceneOrderedDocCollector.java

License:Apache License

@Nullable
@VisibleForTesting/*from ww w . j  ava  2s .  c o m*/
static Query nextPageQuery(FieldDoc lastCollected, OrderBy orderBy, Object[] missingValues,
        FieldTypeLookup fieldTypeLookup) {
    BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
    for (int i = 0; i < orderBy.orderBySymbols().size(); i++) {
        Symbol order = orderBy.orderBySymbols().get(i);
        Object value = lastCollected.fields[i];
        if (order instanceof Reference) {
            boolean nullsFirst = orderBy.nullsFirst()[i] == null ? false : orderBy.nullsFirst()[i];
            value = value == null || value.equals(missingValues[i]) ? null : value;
            if (nullsFirst && value == null) {
                // no filter needed
                continue;
            }
            String columnName = ((Reference) order).ident().columnIdent().fqn();
            MappedFieldType fieldType = requireNonNull(fieldTypeLookup.get(columnName),
                    "Column must exist: " + columnName);

            Query orderQuery;
            // nulls already gone, so they should be excluded
            if (nullsFirst) {
                BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
                booleanQuery.add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST);
                if (orderBy.reverseFlags()[i]) {
                    booleanQuery.add(fieldType.rangeQuery(null, value, false, true),
                            BooleanClause.Occur.MUST_NOT);
                } else {
                    booleanQuery.add(fieldType.rangeQuery(value, null, true, false),
                            BooleanClause.Occur.MUST_NOT);
                }
                orderQuery = booleanQuery.build();
            } else {
                if (orderBy.reverseFlags()[i]) {
                    orderQuery = fieldType.rangeQuery(value, null, false, false);
                } else {
                    orderQuery = fieldType.rangeQuery(null, value, false, false);
                }
            }
            queryBuilder.add(orderQuery, BooleanClause.Occur.MUST);
        }
    }
    BooleanQuery query = queryBuilder.build();
    if (query.clauses().size() > 0) {
        return query;
    } else {
        return null;
    }
}

From source file:io.crate.operation.collect.collectors.OptimizeQueryForSearchAfter.java

License:Apache License

@Override
public Query apply(FieldDoc lastCollected) {
    BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();
    for (int i = 0; i < orderBy.orderBySymbols().size(); i++) {
        Symbol order = orderBy.orderBySymbols().get(i);
        Object value = lastCollected.fields[i];
        if (order instanceof Reference) {
            final ColumnIdent columnIdent = ((Reference) order).ident().columnIdent();
            if (columnIdent.isSystemColumn()) {
                // We can't optimize the initial query because the BooleanQuery
                // must not contain system columns.
                return null;
            }/*from w  w w . jav a  2  s . c  om*/
            boolean nullsFirst = orderBy.nullsFirst()[i] == null ? false : orderBy.nullsFirst()[i];
            value = value == null || value.equals(missingValues[i]) ? null : value;
            if (nullsFirst && value == null) {
                // no filter needed
                continue;
            }
            String columnName = columnIdent.fqn();
            MappedFieldType fieldType = requireNonNull(fieldTypeLookup.get(columnName),
                    "Column must exist: " + columnName);

            Query orderQuery;
            // nulls already gone, so they should be excluded
            if (nullsFirst) {
                BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
                booleanQuery.add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST);
                if (orderBy.reverseFlags()[i]) {
                    booleanQuery.add(fieldType.rangeQuery(null, value, false, true, queryShardContext),
                            BooleanClause.Occur.MUST_NOT);
                } else {
                    booleanQuery.add(fieldType.rangeQuery(value, null, true, false, queryShardContext),
                            BooleanClause.Occur.MUST_NOT);
                }
                orderQuery = booleanQuery.build();
            } else {
                if (orderBy.reverseFlags()[i]) {
                    orderQuery = fieldType.rangeQuery(value, null, false, false, queryShardContext);
                } else {
                    orderQuery = fieldType.rangeQuery(null, value, false, false, queryShardContext);
                }
            }
            queryBuilder.add(orderQuery, BooleanClause.Occur.MUST);
        }
    }
    BooleanQuery query = queryBuilder.build();
    if (query.clauses().size() > 0) {
        return query;
    } else {
        return null;
    }
}

From source file:io.crate.operation.collect.collectors.OrderedDocCollector.java

License:Apache License

@Nullable
public static Query nextPageQuery(FieldDoc lastCollected, OrderBy orderBy, Object[] missingValues) {
    BooleanQuery query = new BooleanQuery();
    for (int i = 0; i < orderBy.orderBySymbols().size(); i++) {
        Symbol order = orderBy.orderBySymbols().get(i);
        Object value = lastCollected.fields[i];
        if (order instanceof Reference) {
            boolean nullsFirst = orderBy.nullsFirst()[i] == null ? false : orderBy.nullsFirst()[i];
            value = value.equals(missingValues[i]) ? null : value;
            if (nullsFirst && value == null) {
                // no filter needed
                continue;
            }//from ww w.j a va  2s . c o  m
            QueryBuilderHelper helper = QueryBuilderHelper.forType(order.valueType());
            String columnName = ((Reference) order).info().ident().columnIdent().fqn();

            Query orderQuery;
            // nulls already gone, so they should be excluded
            if (nullsFirst && value != null) {
                BooleanFilter booleanFilter = new BooleanFilter();
                if (orderBy.reverseFlags()[i]) {
                    booleanFilter.add(helper.rangeFilter(columnName, null, value, false, true),
                            BooleanClause.Occur.MUST_NOT);
                } else {
                    booleanFilter.add(helper.rangeFilter(columnName, value, null, true, false),
                            BooleanClause.Occur.MUST_NOT);
                }
                orderQuery = new FilteredQuery(new MatchAllDocsQuery(), booleanFilter);
            } else {
                if (orderBy.reverseFlags()[i]) {
                    orderQuery = helper.rangeQuery(columnName, value, null, false, false);
                } else {
                    orderQuery = helper.rangeQuery(columnName, null, value, false, false);
                }
            }
            query.add(orderQuery, BooleanClause.Occur.MUST);
        }
    }
    if (query.clauses().size() > 0) {
        return query;
    } else {
        return null;
    }
}

From source file:net.sf.mmm.search.engine.impl.lucene.LuceneSearchQueryBuilderFactoryTest.java

License:Apache License

/**
 * Test of {@link SearchQueryBuilder#createComplexQuery()}.
 *///w w w .  j  a  v a 2 s.  c  o m
@Test
public void testCreateComplexQuery() {

    SearchQueryBuilder queryBuilder = getQueryBuilder();
    ComplexSearchQuery complexQuery = queryBuilder.createComplexQuery();
    BooleanQuery booleanQuery = getLuceneQuery(complexQuery, BooleanQuery.class);
    Assert.assertEquals(0, complexQuery.getSubQueryCount());

    SearchQuery subQuery1 = queryBuilder.createWordQuery(SearchEntry.FIELD_TEXT, "foo");
    complexQuery.addRequiredQuery(subQuery1);
    Assert.assertEquals(1, complexQuery.getSubQueryCount());
    SearchQuery subQuery2 = queryBuilder.createWordQuery(SearchEntry.FIELD_TEXT, "bar");
    complexQuery.addRequiredQuery(subQuery2);
    Assert.assertEquals(2, complexQuery.getSubQueryCount());
    SearchQuery subQuery3 = queryBuilder.createWordQuery(SearchEntry.FIELD_TEXT, "some");
    complexQuery.addExcludingQuery(subQuery3);
    Assert.assertEquals(3, complexQuery.getSubQueryCount());
    SearchQuery subQuery4 = queryBuilder.createWordQuery(SearchEntry.FIELD_TEXT, "thing");
    complexQuery.addOptionalQuery(subQuery4);
    Assert.assertEquals(4, complexQuery.getSubQueryCount());
    List<BooleanClause> clauses = booleanQuery.clauses();
    Assert.assertNotNull(clauses);
    Assert.assertEquals(4, clauses.size());
    Assert.assertSame(getLuceneQuery(subQuery1), clauses.get(0).getQuery());
    Assert.assertSame(Occur.MUST, clauses.get(0).getOccur());
    Assert.assertSame(getLuceneQuery(subQuery2), clauses.get(1).getQuery());
    Assert.assertSame(Occur.MUST, clauses.get(1).getOccur());
    Assert.assertSame(getLuceneQuery(subQuery3), clauses.get(2).getQuery());
    Assert.assertSame(Occur.MUST_NOT, clauses.get(2).getOccur());
    Assert.assertSame(getLuceneQuery(subQuery4), clauses.get(3).getQuery());
    Assert.assertSame(Occur.SHOULD, clauses.get(3).getOccur());
}

From source file:net.sf.mmm.search.engine.impl.lucene.LuceneSearchQueryBuilderFactoryTest.java

License:Apache License

/**
 * Test of {@link SearchQueryBuilder#parseStandardQuery(String)}.
 */// www . j a va  2s.  c  om
@Test
public void testParseStandardQuery() {

    SearchQueryBuilder queryBuilder = getQueryBuilder();
    SearchQuery query = queryBuilder.parseStandardQuery("foo *bar* +(some* thing) -exclude");
    BooleanQuery booleanQuery = getLuceneQuery(query, BooleanQuery.class);
    List<BooleanClause> clauses = booleanQuery.clauses();
    Assert.assertNotNull(clauses);
    Assert.assertEquals(4, clauses.size());
    Assert.assertEquals("foo", getLuceneQuery(clauses.get(0).getQuery(), TermQuery.class).getTerm().text());
    Assert.assertSame(Occur.SHOULD, clauses.get(0).getOccur());
    Assert.assertEquals("*bar*",
            getLuceneQuery(clauses.get(1).getQuery(), WildcardQuery.class).getTerm().text());
    Assert.assertSame(Occur.SHOULD, clauses.get(1).getOccur());
    Assert.assertEquals("exclude", getLuceneQuery(clauses.get(3).getQuery(), TermQuery.class).getTerm().text());
    Assert.assertSame(Occur.MUST_NOT, clauses.get(3).getOccur());
    BooleanQuery subQuery = getLuceneQuery(clauses.get(2).getQuery(), BooleanQuery.class);
    Assert.assertSame(Occur.MUST, clauses.get(2).getOccur());
    List<BooleanClause> subClauses = subQuery.clauses();
    Assert.assertNotNull(subClauses);
    Assert.assertEquals(2, subClauses.size());
    Assert.assertEquals("some",
            getLuceneQuery(subClauses.get(0).getQuery(), PrefixQuery.class).getPrefix().text());
    Assert.assertSame(Occur.SHOULD, subClauses.get(0).getOccur());
    Assert.assertEquals("thing",
            getLuceneQuery(subClauses.get(1).getQuery(), TermQuery.class).getTerm().text());
    Assert.assertSame(Occur.SHOULD, subClauses.get(1).getOccur());

    query = queryBuilder.parseStandardQuery("()");
    MatchAllDocsQuery allDocsQuery = getLuceneQuery(query, MatchAllDocsQuery.class);
    Assert.assertNotNull(allDocsQuery);
}