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:org.apache.blur.lucene.search.RandomSuperQueryTest.java

License:Apache License

private List<Document> generatSuperDoc(Random random, Map<String, String[]> columns,
        Collection<Query> sampler) {
    List<Document> docs = new ArrayList<Document>();
    BooleanQuery booleanQuery = new BooleanQuery();
    for (String colFam : columns.keySet()) {
        String[] cols = columns.get(colFam);
        for (int i = 0; i < random.nextInt(MAX_NUM_DOCS_PER_COL_FAM); i++) {
            Document doc = new Document();
            for (String column : cols) {
                if (random.nextInt() % MOD_COLS_USED_FOR_SKIPPING == 0) {
                    String word = genWord(random, "word");
                    doc.add(new StringField(colFam + "." + column, word, Store.YES));
                    if (random.nextInt() % MOD_USED_FOR_SAMPLING == 0) {
                        TermQuery termQuery = new TermQuery(new Term(colFam + "." + column, word));
                        SuperQuery query = new SuperQuery(termQuery, ScoreType.SUPER,
                                new Term(PRIME_DOC, PRIME_DOC_VALUE));
                        booleanQuery.add(query, Occur.MUST);
                    }//from ww w. j  a  v  a2 s . co m
                }
            }
            docs.add(doc);
        }
    }
    if (!booleanQuery.clauses().isEmpty()) {
        sampler.add(booleanQuery);
    }
    Document document = docs.get(0);
    document.add(new StringField(PRIME_DOC, PRIME_DOC_VALUE, Store.NO));
    return docs;
}

From source file:org.apache.blur.lucene.search.SuperParser.java

License:Apache License

private Query fixNegatives(Query query) {
    if (query instanceof SuperQuery) {
        SuperQuery superQuery = (SuperQuery) query;
        fixNegatives(superQuery.getQuery());
    } else if (query instanceof BooleanQuery) {
        BooleanQuery booleanQuery = (BooleanQuery) query;
        for (BooleanClause clause : booleanQuery.clauses()) {
            fixNegatives(clause.getQuery());
        }/*from   w  w  w . j  a  va  2s  .c  om*/
        if (containsAllNegativeQueries(booleanQuery)) {
            if (containsSuperQueries(booleanQuery)) {
                booleanQuery.add(new TermQuery(_defaultPrimeDocTerm), Occur.SHOULD);
            } else {
                booleanQuery.add(new MatchAllDocsQuery(), Occur.SHOULD);
            }
        }
    }
    return query;
}

From source file:org.apache.blur.lucene.search.SuperParser.java

License:Apache License

private boolean containsAllNegativeQueries(BooleanQuery booleanQuery) {
    for (BooleanClause clause : booleanQuery.clauses()) {
        if (clause.getOccur() == Occur.MUST || clause.getOccur() == Occur.SHOULD) {
            return false;
        }//from   w w w.ja  va 2  s  .c o  m
    }
    return true;
}

From source file:org.apache.blur.lucene.search.SuperParser.java

License:Apache License

private boolean isSameGroupName(Query query, String groupName) {
    if (query instanceof BooleanQuery) {
        BooleanQuery booleanQuery = (BooleanQuery) query;
        for (BooleanClause clause : booleanQuery.clauses()) {
            if (!isSameGroupName(clause.getQuery(), groupName)) {
                return false;
            }// w  ww . ja v  a  2  s.c  om
        }
        return true;
    } else {
        String fieldName = _fieldNames.get(query);
        String currentGroupName = getGroupName(fieldName);
        if (groupName.equals(currentGroupName) || isSystemField(fieldName)) {
            return true;
        }
        return false;
    }
}

From source file:org.apache.blur.lucene.search.SuperParser.java

License:Apache License

private String findFirstGroupName(Query query) {
    if (query instanceof BooleanQuery) {
        BooleanQuery booleanQuery = (BooleanQuery) query;
        for (BooleanClause clause : booleanQuery.clauses()) {
            return findFirstGroupName(clause.getQuery());
        }// w  w  w  . j  ava 2 s  . c  o  m
        return null;
    } else if (query instanceof SuperQuery) {
        SuperQuery sq = (SuperQuery) query;
        return findFirstGroupName(sq.getQuery());
    } else {
        String fieldName = _fieldNames.get(query);
        return getGroupName(fieldName);
    }
}

From source file:org.apache.blur.lucene.search.SuperParserTest.java

License:Apache License

public static void assertEqualsBooleanQuery(BooleanQuery expected, BooleanQuery actual) {
    List<BooleanClause> clauses1 = expected.clauses();
    List<BooleanClause> clauses2 = actual.clauses();
    assertEqualsBooleanClause(clauses1, clauses2);
}

From source file:org.apache.blur.manager.AliasBlurFilterCache.java

License:Apache License

private Filter buildNewFilter(Query query, ConcurrentMap<String, String> filterAlias, FilterParser filterParser)
        throws ParseException {
    if (query instanceof BooleanQuery) {
        BooleanQuery booleanQuery = (BooleanQuery) query;
        BooleanFilter booleanFilter = new BooleanFilter();
        for (BooleanClause clause : booleanQuery.clauses()) {
            booleanFilter.add(buildNewFilter(clause.getQuery(), filterAlias, filterParser), clause.getOccur());
        }//from w  ww  .  ja  v a  2s .  c  om
        return booleanFilter;
    } else if (query instanceof TermQuery) {
        TermQuery termQuery = (TermQuery) query;
        Term term = termQuery.getTerm();
        String key = term.toString();
        String queryStr = filterAlias.get(key);
        if (queryStr == null) {
            return new QueryWrapperFilter(termQuery);
        }
        String id = getId(key);
        return new FilterCache(id, new QueryWrapperFilter(filterParser.parse(queryStr)));
    } else {
        return new QueryWrapperFilter(query);
    }
}

From source file:org.apache.blur.server.BlurSecureIndexSearcher.java

License:Apache License

/**
 * This method is very important!!! It handles rewriting the real query (which
 * can be a {@link SuperQuery} to have document (record) level filtering or
 * access control./* w w  w  .  j a  v a  2  s  . co  m*/
 */
@Override
protected Query wrapFilter(Query query, Filter filter) {
    if (filter == null) {
        return query;
    } else if (query instanceof SuperQuery) {
        SuperQuery superQuery = (SuperQuery) query;
        Query innerQuery = superQuery.getQuery();
        Term primeDocTerm = superQuery.getPrimeDocTerm();
        ScoreType scoreType = superQuery.getScoreType();
        return new SuperQuery(wrapFilter(innerQuery, filter), scoreType, primeDocTerm);
    } else if (query instanceof BooleanQuery) {
        BooleanQuery booleanQuery = (BooleanQuery) query;
        List<BooleanClause> clauses = booleanQuery.clauses();
        for (BooleanClause booleanClause : clauses) {
            booleanClause.setQuery(wrapFilter(booleanClause.getQuery(), filter));
        }
        return booleanQuery;
    } else {
        return new FilteredQuery(query, filter);
    }
}

From source file:org.apache.blur.server.BlurSecureIndexSearcherTest.java

License:Apache License

@Test
public void testQueryFilterWrap2() throws IOException {
    IndexReader r = getIndexReader();/*from  w ww.j  a  va2 s. c om*/
    AccessControlFactory accessControlFactory = new FilterAccessControlFactory();
    Collection<String> readAuthorizations = new ArrayList<String>();
    Collection<String> discoverAuthorizations = new ArrayList<String>();
    Set<String> discoverableFields = new HashSet<String>(Arrays.asList("rowid"));
    BlurSecureIndexSearcher blurSecureIndexSearcher = new BlurSecureIndexSearcher(r, null, accessControlFactory,
            readAuthorizations, discoverAuthorizations, discoverableFields);
    Query wrapFilter;
    Query query = new TermQuery(new Term("a", "b"));
    Filter filter = new Filter() {
        @Override
        public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
            throw new RuntimeException("Not implemented.");
        }
    };
    {
        Term primeDocTerm = new Term(BlurConstants.PRIME_DOC, BlurConstants.PRIME_DOC_VALUE);
        ScoreType scoreType = ScoreType.SUPER;
        SuperQuery superQuery = new SuperQuery(query, scoreType, primeDocTerm);
        BooleanQuery booleanQuery = new BooleanQuery();
        booleanQuery.add(superQuery, Occur.MUST);
        wrapFilter = blurSecureIndexSearcher.wrapFilter(booleanQuery, filter);
        System.out.println(wrapFilter);
    }
    {
        assertTrue(wrapFilter instanceof BooleanQuery);
        BooleanQuery booleanQuery = (BooleanQuery) wrapFilter;
        assertEquals(1, booleanQuery.clauses().size());
        BooleanClause booleanClause = booleanQuery.clauses().get(0);
        Query innerClause = booleanClause.getQuery();

        assertTrue(innerClause instanceof SuperQuery);
        SuperQuery sq = (SuperQuery) innerClause;
        Query inner = sq.getQuery();
        assertTrue(inner instanceof FilteredQuery);
        FilteredQuery filteredQuery = (FilteredQuery) inner;
        Query innerFilteredQuery = filteredQuery.getQuery();
        assertEquals(innerFilteredQuery, query);
        assertTrue(filteredQuery.getFilter() == filter);
    }
}

From source file:org.apache.jackrabbit.core.query.lucene.LuceneQueryBuilder.java

License:Apache License

public Object visit(PathQueryNode node, Object data) throws RepositoryException {
    Query context = null;/*from  w  w  w .j av  a 2s .c o m*/
    LocationStepQueryNode[] steps = node.getPathSteps();
    if (steps.length > 0) {
        if (node.isAbsolute() && !steps[0].getIncludeDescendants()) {
            // eat up first step
            Name nameTest = steps[0].getNameTest();
            if (nameTest == null) {
                // this is equivalent to the root node
                context = new JackrabbitTermQuery(new Term(FieldNames.PARENT, ""));
            } else if (nameTest.getLocalName().length() == 0) {
                // root node
                context = new JackrabbitTermQuery(new Term(FieldNames.PARENT, ""));
            } else {
                // then this is a node != the root node
                // will never match anything!
                BooleanQuery and = new BooleanQuery();
                and.add(new JackrabbitTermQuery(new Term(FieldNames.PARENT, "")), Occur.MUST);
                and.add(new NameQuery(nameTest, indexFormatVersion, nsMappings), Occur.MUST);
                context = and;
            }
            // apply predicates
            Object[] predicates = steps[0].acceptOperands(this, context);
            BooleanQuery andQuery = new BooleanQuery();
            for (Object predicate : predicates) {
                andQuery.add((Query) predicate, Occur.MUST);
            }
            if (andQuery.clauses().size() > 0) {
                andQuery.add(context, Occur.MUST);
                context = andQuery;
            }

            LocationStepQueryNode[] tmp = new LocationStepQueryNode[steps.length - 1];
            System.arraycopy(steps, 1, tmp, 0, steps.length - 1);
            steps = tmp;
        } else {
            // path is 1) relative or 2) descendant-or-self
            // use root node as context
            context = new JackrabbitTermQuery(new Term(FieldNames.PARENT, ""));
        }
    } else {
        exceptions.add(new InvalidQueryException("Number of location steps must be > 0"));
    }
    // loop over steps
    for (LocationStepQueryNode step : steps) {
        context = (Query) step.accept(this, context);
    }
    if (data instanceof BooleanQuery) {
        BooleanQuery constraint = (BooleanQuery) data;
        if (constraint.getClauses().length > 0) {
            constraint.add(context, Occur.MUST);
            context = constraint;
        }
    }
    return context;
}