Example usage for org.apache.lucene.search BooleanClause getQuery

List of usage examples for org.apache.lucene.search BooleanClause getQuery

Introduction

In this page you can find the example usage for org.apache.lucene.search BooleanClause getQuery.

Prototype

public Query getQuery() 

Source Link

Usage

From source file:cn.b2b.index.product.index.ProductQueryOptimizer.java

private BooleanQuery filterQuery(Searcher searcher, BooleanQuery original, BooleanQuery query)
        throws IOException {
    BooleanQuery filterQuery = null;//w  ww  .j a  va 2 s .  c o  m
    BooleanClause[] clauses = original.getClauses();
    for (int i = 0; i < clauses.length; i++) {
        BooleanClause c = clauses[i];
        if (c.isRequired() // required
                && c.getQuery().getBoost() == 0.0f // boost is zero
                && c.getQuery() instanceof TermQuery // TermQuery
                && (searcher.docFreq(((TermQuery) c.getQuery()).getTerm())
                        / (float) searcher.maxDoc()) >= threshold) { // check threshold
            if (filterQuery == null)
                filterQuery = new BooleanQuery();
            // lucene1.4.3 -> lucene2.0.0
            // filterQuery.add(c.getQuery(), true, false); // filter it
            filterQuery.add(c.getQuery(), BooleanClause.Occur.MUST); // filter
            // it
        } else {
            query.add(c); // query it
        }
    }
    return filterQuery;
}

From source file:cn.b2b.index.product.index.ProductQueryOptimizer.java

@Override
public Writable explain(IndexSearcher searcher, Writable param) throws Exception {

    ExplainParam queryParam = (ExplainParam) param;
    Query oriquery = queryParam.getQuery();
    BooleanQuery original = QueryFilters.filter(oriquery, Constants.SLOP_SCORE_CVM_CLASS);
    BooleanQuery query = new BooleanQuery();
    BooleanQuery filterQuery = null;/*from   ww w  .  j av  a  2 s .  com*/
    BooleanClause[] clauses = original.getClauses();
    for (int i = 0; i < clauses.length; i++) {
        BooleanClause c = clauses[i];
        if (c.isRequired() // required
                && c.getQuery().getBoost() == 0.0f // boost is zero
                && c.getQuery() instanceof TermQuery // TermQuery
                && (searcher.docFreq(((TermQuery) c.getQuery()).getTerm())
                        / (float) searcher.maxDoc()) >= threshold) { // check threshold
            if (filterQuery == null)
                filterQuery = new BooleanQuery();
            // lucene1.4.3 -> lucene2.0.0
            // filterQuery.add(c.getQuery(), true, false); // filter it
            filterQuery.add(c.getQuery(), BooleanClause.Occur.MUST); // filter
            // it
        } else {
            query.add(c); // query it
        }
    }

    Filter filter = null;
    if (filterQuery != null) {
        synchronized (cache) { // check cache
            filter = (Filter) cache.get(filterQuery);
        }
        if (filter == null) { // miss
            filter = new QueryFilter(filterQuery); // construct new entry
            synchronized (cache) {
                cache.put(filterQuery, filter); // cache it
            }
        }
    }
    ScoreParam scoreParam = new ScoreParam();
    // store segment query word
    query.setQueryStr(original.getQueryStr());

    float[] ranks = (float[]) MemoryFieldCache.get("rank");
    Explanation explain = searcher.explain(query, queryParam.getDoc());
    return new UTF8("RANK:" + ranks[queryParam.getDoc()] + "\t" + explain.toString());
}

From source file:com.bizosys.hsearch.query.HQueryParser.java

License:Apache License

private static void parseComposites(Query lQuery, HQuery hQuery) {

    for (BooleanClause clause : ((BooleanQuery) lQuery).clauses()) {

        Query subQueryL = clause.getQuery();

        if (subQueryL instanceof BooleanQuery) {

            HQuery subQueryH = new HQuery();
            subQueryH.isShould = clause.getOccur().compareTo(Occur.SHOULD) == 0;
            subQueryH.isMust = clause.getOccur().compareTo(Occur.MUST) == 0;

            hQuery.subQueries.add(subQueryH);
            parseComposites(subQueryL, subQueryH);

        } else {//from w w  w.j av  a 2  s.  c  om
            HQuery.HTerm hTerm = new HQuery.HTerm();
            hTerm.isShould = clause.getOccur().compareTo(Occur.SHOULD) == 0;
            hTerm.isMust = clause.getOccur().compareTo(Occur.MUST) == 0;
            hTerm.boost = subQueryL.getBoost();
            hQuery.terms.add(hTerm);

            if (subQueryL instanceof TermQuery) {
                TermQuery lTerm = (TermQuery) subQueryL;
                hTerm.type = lTerm.getTerm().field();
                hTerm.text = lTerm.getTerm().text();

            } else if (subQueryL instanceof FuzzyQuery) {
                FuzzyQuery lTerm = (FuzzyQuery) subQueryL;
                hTerm.isFuzzy = true;
                hTerm.type = lTerm.getTerm().field();
                hTerm.text = lTerm.getTerm().text();

            } else {
                hTerm.type = "Not Impemented";
                hTerm.text = "Not Impemented";
            }

        }
    }
}

From source file:com.browseengine.bobo.search.section.SectionSearchQueryPlanBuilder.java

License:Apache License

private SectionSearchQueryPlan translateBooleanQuery(BooleanQuery query) throws IOException {
    ArrayList<Query> requiredClauses = new ArrayList<Query>();
    ArrayList<Query> prohibitedClauses = new ArrayList<Query>();
    ArrayList<Query> optionalClauses = new ArrayList<Query>();
    BooleanClause[] clauses = query.getClauses();
    for (BooleanClause clause : clauses) {
        if (clause.isRequired()) {
            requiredClauses.add(clause.getQuery());
        } else if (clause.isProhibited()) {
            prohibitedClauses.add(clause.getQuery());
        } else {/*from   www  . j  a v a2s  . co  m*/
            optionalClauses.add(clause.getQuery());
        }
    }

    SectionSearchQueryPlan positiveNode = null;
    SectionSearchQueryPlan negativeNode = null;

    if (requiredClauses.size() > 0) {
        if (requiredClauses.size() == 1) {
            positiveNode = translate(requiredClauses.get(0));
        } else {
            SectionSearchQueryPlan[] subqueries = translate(requiredClauses);
            if (subqueries != null && subqueries.length > 0)
                positiveNode = new AndNode(subqueries);
        }
    } else if (optionalClauses.size() > 0) {
        if (optionalClauses.size() == 1) {
            positiveNode = translate(optionalClauses.get(0));
        } else {
            SectionSearchQueryPlan[] subqueries = translate(optionalClauses);
            if (subqueries != null && subqueries.length > 0)
                positiveNode = new OrNode(subqueries);
        }
    }

    if (prohibitedClauses.size() > 0) {
        if (prohibitedClauses.size() == 1) {
            negativeNode = translate(prohibitedClauses.get(0));
        } else {
            negativeNode = new OrNode(translate(prohibitedClauses));
        }
    }

    if (negativeNode == null) {
        return positiveNode;
    } else {
        if (positiveNode == null) {
            return new UnaryNotNode(negativeNode);
        } else {
            return new AndNotNode(positiveNode, negativeNode);
        }
    }
}

From source file:com.flaptor.indextank.query.IndexEngineParser.java

License:Apache License

private QueryNode internalParseBooleanQuery(List<BooleanClause> list, final String originalStr)
        throws ParseException {
    Preconditions.checkArgument(list.size() > 0, "too few terms to build a boolean query");
    List<BooleanClause> positiveClauses = new ArrayList<BooleanClause>();
    List<BooleanClause> negativeClauses = new ArrayList<BooleanClause>();
    for (BooleanClause clause : list) {
        if (clause.isProhibited()) {
            negativeClauses.add(clause);
        } else {//  w  w w .j ava2  s .c o  m
            positiveClauses.add(clause);
        }
    }
    if (positiveClauses.isEmpty()) {
        throw new ParseException("No positive clauses.");
    }
    QueryNode retVal = internalParsePositive(positiveClauses, originalStr);

    for (BooleanClause clause : negativeClauses) {
        retVal = new DifferenceQuery(retVal, internalParse(clause.getQuery(), null));
    }
    return retVal;
}

From source file:com.github.healthonnet.search.SynonymExpandingExtendedDismaxQParserPlugin.java

License:Apache License

/**
 * Find the main query and its surrounding clause, make it SHOULD instead of MUST and append a bunch of other SHOULDs to it, then wrap it in a MUST E.g. +(text:dog) becomes +((text:dog)^1.5 ((text:hound) (text:pooch))^1.2)
 * /*from   w  ww.  j  a va2  s  .  co m*/
 * @param query
 * @param synonymQueries
 * @param originalBoost
 * @param synonymBoost
 */
private Query applySynonymQueries(Query query, List<Query> synonymQueries, float originalBoost,
        float synonymBoost) {
    if (query instanceof BoostedQuery) {
        return applySynonymQueries(((BoostedQuery) query).getQuery(), synonymQueries, originalBoost,
                synonymBoost);
    } else if (query instanceof BooleanQuery) {
        BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
        for (BooleanClause booleanClause : ((BooleanQuery) query).clauses()) {
            if (Occur.MUST == booleanClause.getOccur()) {
                BooleanQuery.Builder combinedQueryBuilder = new BooleanQuery.Builder();
                combinedQueryBuilder.add(new BoostQuery(booleanClause.getQuery(), originalBoost), Occur.SHOULD);
                // standard 'must occur' clause - i.e. the main user query

                for (Query synonymQuery : synonymQueries) {
                    if (synonymQuery != null) {
                        BooleanQuery.Builder booleanSynonymQueryBuilder = new BooleanQuery.Builder();
                        booleanSynonymQueryBuilder.add(new BoostQuery(synonymQuery, synonymBoost),
                                Occur.SHOULD);
                        combinedQueryBuilder.add(booleanSynonymQueryBuilder.build(), Occur.SHOULD);
                    }
                }
                booleanQueryBuilder.add(combinedQueryBuilder.build(), Occur.MUST);
            } else {
                booleanQueryBuilder.add(booleanClause);
            }
        }
        query = booleanQueryBuilder.build();
        queryToHighlight = query;
    }
    return query;
}

From source file:com.github.rnewson.couchdb.lucene.QueryPlan.java

License:Apache License

private static void planBooleanQuery(final StringBuilder builder, final BooleanQuery query) {
    for (final BooleanClause clause : query.getClauses()) {
        builder.append(clause.getOccur());
        toPlan(builder, clause.getQuery());
    }/*from   w  w w .  j  a va 2s.  c o m*/
}

From source file:com.hrstc.lucene.queryexpansion.PatentClassCodeBasedQueryExpansion.java

License:Apache License

/**
 * Performs Rocchio's query expansion with pseudo feedback for each fields
 * separatlly qm = alpha * query + ( beta / relevanDocsCount ) * Sum ( rel
 * docs vector )/*from  w w  w .j av a 2s  . c  o m*/
 *
 * @param query
 *
 * @return expandedQuery
 *
 * @throws IOException
 * @throws ParseException
 */
@Override
public Query expandQuery(PatentQuery query) throws ParseException, IOException {
    BooleanQuery bQuery = new BooleanQuery();
    BooleanQuery bQueryFieldsExpanded = new BooleanQuery();
    BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
    //********************************************************************
    //**************** Get the sec of definition codes ******************* 
    //********************************************************************
    TotalHitCountCollector collector = new TotalHitCountCollector();
    Query codesQuery = GenerateClassCodesQuery.generateQuery(query.getFullClassCodes());
    //        System.err.println(codesQuery);
    classCodesSearcher.search(codesQuery, collector);
    IndexReader ir = classCodesSearcher.getIndexReader();
    TopDocs hits = classCodesSearcher.search(codesQuery, Math.max(1, collector.getTotalHits())); // Compute PRF set
    //                System.err.println("Found " + hits.totalHits
    //                        + " document(s)  that matched query '"
    //                        + codesQuery + "':");
    //                for (ScoreDoc scoreDoc : hits.scoreDocs) {
    //                    System.out.println("----------");
    //                    Document doc = classCodesSearcher.doc(scoreDoc.doc);
    //                    System.out.println(scoreDoc.score + "\t" + doc.get(PatentDocument.Classification) + "\t" + doc.get(PatentDocument.Title));// + "\t" + doc.get("type") + "\t" + doc.get("num") + "\t" + doc.get("lang"));
    ////            System.out.println(explanation.toString());
    //                }
    //                System.out.println("*************************************");
    Query expandedQuery = null;
    ClassCodeBasedQueryExpansion queryExpansion = new ClassCodeBasedQueryExpansion(hits, ir, parameters,
            Nbr_Terms);
    for (int i = 1; i < PatentQuery.getFields().length; i++) {
        if (query.getQueries()[i] != null && !query.getQueries()[i].equals("") && (i != 4 || i != 6)
                && query.getBoosts().get(PatentQuery.getFields()[i]) != 0) {
            QueryParser qp = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[i],
                    new StandardAnalyzer(Version.LUCENE_48));
            BooleanQuery bQueryFields = new BooleanQuery();// Contain a field to make the PRF field by field
            Query q = qp.parse(query.getQueries()[i]);
            if (query.isFilter()) {
                Query filter = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
                        new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
                bQueryFields.add(filter, BooleanClause.Occur.MUST);
            }
            if (!(q instanceof BooleanQuery) || ((BooleanQuery) q).getClauses().length > 0) {
                bQueryFields.add(q, BooleanClause.Occur.MUST);
            }

            //                System.err.println(hits.totalHits + " total matching documents for field " + query.getFields()[i] + ".");
            if (expandedQuery == null) {
                expandedQuery = queryExpansion.expandQuery(q, PatentQuery.getFields()[i]);
            } else {
                BooleanQuery bq = ((BooleanQuery) expandedQuery).clone();
                BooleanQuery bq2 = new BooleanQuery();
                for (BooleanClause bc : bq.clauses()) {
                    TermQuery tq = (TermQuery) bc.getQuery();
                    Term term = new Term(PatentQuery.getFields()[i], tq.getTerm().text());
                    TermQuery tq2 = new TermQuery(term);
                    tq2.setBoost(tq.getBoost());
                    bq2.add(tq2, BooleanClause.Occur.SHOULD);
                }
                expandedQuery = bq2;
            }
            bQueryFieldsExpanded.add(expandedQuery, BooleanClause.Occur.SHOULD);// Compute the new expanded query based on PRF set
            //                System.err.println("Expanded Query: " + expandedQuery);
            //                hits = searcher.search(expandedQuery, 100);
            //                System.err.println(hits.totalHits + " total matching documents"+ query.getFields()[i] + ".");
        }
    }
    if (query.isFilter()) {
        Query q = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
                new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
        q.setBoost(query.getBoosts().get(PatentQuery.getFields()[0]));
        bQuery.add(q, BooleanClause.Occur.MUST);
    }
    bQuery.add(bQueryFieldsExpanded, BooleanClause.Occur.MUST);
    //        hits = searcher.search(bQuery, 100);
    //                System.err.println(hits.totalHits + " total matching documents.");
    return bQuery;
}

From source file:com.hrstc.lucene.queryexpansion.PatentRocchioQueryExpansion.java

License:Apache License

/**
 * Performs Rocchio's query expansion with pseudo feedback for each fields
 * separatlly qm = alpha * query + ( beta / relevanDocsCount ) * Sum ( rel
 * docs vector )//  w  w w. j  av a2s. co  m
 *
 * @param query
 *
 * @return expandedQuery
 *
 * @throws IOException
 * @throws ParseException
 */
@Override
public Query expandQuery(PatentQuery query) throws ParseException, IOException {
    BooleanQuery bQuery = new BooleanQuery();
    BooleanQuery bQueryFieldsExpanded = new BooleanQuery();
    BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
    //*****************************************************************
    //**************** Compute the PRF for field (i)******************* 
    //*****************************************************************
    TotalHitCountCollector collector = new TotalHitCountCollector();
    searcher.search(query.parse(), collector);
    IndexReader ir = searcher.getIndexReader();
    TopDocs hits = searcher.search(query.parse(), Math.max(1, collector.getTotalHits())); // Compute PRF set
    //                System.err.println(hits.totalHits + " total matching documents for field " + query.getFields()[i] + ".");
    Query expandedQuery = null;
    RocchioQueryExpansion queryExpansion = new RocchioQueryExpansion(hits, ir, parameters, source, Nbr_Docs,
            Nbr_Terms);
    for (int i = 1; i < PatentQuery.getFields().length; i++) {
        if (query.getQueries()[i] != null && !query.getQueries()[i].equals("") && (i != 4 || i != 6)
                && query.getBoosts().get(PatentQuery.getFields()[i]) != 0) {
            QueryParser qp = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[i],
                    new StandardAnalyzer(Version.LUCENE_48));
            //                BooleanQuery bQueryFields = new BooleanQuery();// Contain a field to make the PRF field by field
            Query q = qp.parse(query.getQueries()[i]);
            //                if (query.isFilter()) {
            //                    Query filter = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
            //                            new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
            //                    bQueryFields.add(filter, BooleanClause.Occur.MUST);
            //                }
            //                if (!(q instanceof BooleanQuery) || ((BooleanQuery) q).getClauses().length > 0) {
            //                    bQueryFields.add(q, BooleanClause.Occur.MUST);
            //                }                
            if (expandedQuery == null) {
                expandedQuery = queryExpansion.expandQuery(q, PatentQuery.getFields()[i]);
            } else {
                BooleanQuery bq = ((BooleanQuery) expandedQuery).clone();
                BooleanQuery bq2 = new BooleanQuery();
                for (BooleanClause bc : bq.clauses()) {
                    TermQuery tq = (TermQuery) bc.getQuery();
                    Term term = new Term(PatentQuery.getFields()[i], tq.getTerm().text());
                    TermQuery tq2 = new TermQuery(term);
                    tq2.setBoost(tq.getBoost());
                    bq2.add(tq2, BooleanClause.Occur.SHOULD);
                }
                expandedQuery = bq2;
            }
            bQueryFieldsExpanded.add(expandedQuery, BooleanClause.Occur.SHOULD);// Compute the new expanded query based on PRF set
            //                System.err.println("Expanded Query: " + expandedQuery);
            //                hits = searcher.search(expandedQuery, 100);
            //                System.err.println(hits.totalHits + " total matching documents"+ query.getFields()[i] + ".");
        }
    }
    if (query.isFilter()) {
        Query q = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
                new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
        q.setBoost(query.getBoosts().get(PatentQuery.getFields()[0]));
        bQuery.add(q, BooleanClause.Occur.MUST);
    }
    bQuery.add(bQueryFieldsExpanded, BooleanClause.Occur.MUST);
    //        TopDocs hits = searcher.search(bQuery, 100);
    //                System.err.println(hits.totalHits + " total matching documents.");
    return bQuery;
}

From source file:com.hrstc.lucene.queryreduction.PatentClassCodeBasedQueryReduction.java

License:Apache License

/**
 * Performs Rocchio's query expansion with pseudo feedback for each fields
 * separatlly qm = alpha * query + ( beta / relevanDocsCount ) * Sum ( rel
 * docs vector )//from   w ww  .  j a va2s  .  c o  m
 *
 * @param query
 *
 * @return expandedQuery
 *
 * @throws IOException
 * @throws ParseException
 */
@Override
public Query expandQuery(PatentQuery query) throws ParseException, IOException {
    BooleanQuery bQuery = new BooleanQuery();
    BooleanQuery bQueryFieldsExpanded = new BooleanQuery();
    BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);
    //********************************************************************
    //**************** Get the sec of definition codes ******************* 
    //********************************************************************
    TotalHitCountCollector collector = new TotalHitCountCollector();
    Query codesQuery = GenerateClassCodesQuery.generateQuery(query.getFullClassCodes());
    //        System.err.println(codesQuery);
    classCodesSearcher.search(codesQuery, collector);
    IndexReader ir = classCodesSearcher.getIndexReader();
    TopDocs hits = classCodesSearcher.search(codesQuery, Math.max(1, collector.getTotalHits())); // Compute PRF set
    //                System.err.println("Found " + hits.totalHits
    //                        + " document(s)  that matched query '"
    //                        + codesQuery + "':");
    //                for (ScoreDoc scoreDoc : hits.scoreDocs) {
    //                    System.out.println("----------");
    //                    Document doc = classCodesSearcher.doc(scoreDoc.doc);
    //                    System.out.println(scoreDoc.score + "\t" + doc.get(PatentDocument.Classification) + "\t" + doc.get(PatentDocument.Title));// + "\t" + doc.get("type") + "\t" + doc.get("num") + "\t" + doc.get("lang"));
    ////            System.out.println(explanation.toString());
    //                }
    //                System.out.println("*************************************");
    Query expandedQuery = null;
    ClassCodeBasedQueryReduction queryExpansion = new ClassCodeBasedQueryReduction(hits, ir, Nbr_Terms);
    for (int i = 1; i < PatentQuery.getFields().length; i++) {
        if (query.getQueries()[i] != null && !query.getQueries()[i].equals("") && (i != 4 || i != 6)
                && query.getBoosts().get(PatentQuery.getFields()[i]) != 0) {
            QueryParser qp = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[i],
                    new StandardAnalyzer(Version.LUCENE_48));
            BooleanQuery bQueryFields = new BooleanQuery();// Contain a field to make the PRF field by field
            Query q = qp.parse(query.getQueries()[i]);
            if (query.isFilter()) {
                Query filter = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
                        new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
                bQueryFields.add(filter, BooleanClause.Occur.MUST);
            }
            if (!(q instanceof BooleanQuery) || ((BooleanQuery) q).getClauses().length > 0) {
                bQueryFields.add(q, BooleanClause.Occur.MUST);
            }

            //                System.err.println(hits.totalHits + " total matching documents for field " + query.getFields()[i] + ".");
            if (expandedQuery == null) {
                expandedQuery = queryExpansion.expandQuery(q, PatentQuery.getFields()[i]);
            } else {
                BooleanQuery bq = ((BooleanQuery) expandedQuery).clone();
                BooleanQuery bq2 = new BooleanQuery();
                for (BooleanClause bc : bq.clauses()) {
                    TermQuery tq = (TermQuery) bc.getQuery();
                    Term term = new Term(PatentQuery.getFields()[i], tq.getTerm().text());
                    TermQuery tq2 = new TermQuery(term);
                    tq2.setBoost(tq.getBoost());
                    bq2.add(tq2, BooleanClause.Occur.SHOULD);
                }
                expandedQuery = bq2;
            }
            bQueryFieldsExpanded.add(expandedQuery, BooleanClause.Occur.SHOULD);// Compute the new expanded query based on PRF set
            //                System.err.println("Expanded Query: " + expandedQuery);
            //                hits = searcher.search(expandedQuery, 100);
            //                System.err.println(hits.totalHits + " total matching documents"+ query.getFields()[i] + ".");
        }
    }
    if (query.isFilter()) {
        Query q = new QueryParser(Version.LUCENE_48, PatentQuery.getFields()[0],
                new StandardAnalyzer(Version.LUCENE_48)).parse(query.getQueries()[0]);
        q.setBoost(query.getBoosts().get(PatentQuery.getFields()[0]));
        bQuery.add(q, BooleanClause.Occur.MUST);
    }
    bQuery.add(bQueryFieldsExpanded, BooleanClause.Occur.MUST);
    //        hits = searcher.search(bQuery, 100);
    //                System.err.println(hits.totalHits + " total matching documents.");
    return bQuery;
}