List of usage examples for org.apache.lucene.search BooleanClause getQuery
public Query getQuery()
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; }