List of usage examples for org.apache.lucene.search BooleanQuery clauses
List clauses
To view the source code for org.apache.lucene.search BooleanQuery clauses.
Click Source Link
From source file:com.zimbra.cs.index.LuceneQueryOperation.java
License:Open Source License
/** * It is not possible to search for queries that only consist of a MUST_NOT clause. Combining with MatchAllDocsQuery * works in general, but we generate more than one documents per item for multipart messages. If we match including * non top level parts, negative queries will end up matching everything. Therefore we only match the top level part * for negative queries./* ww w.j a v a 2 s.co m*/ */ private void fixMustNotOnly(BooleanQuery query) { for (BooleanClause clause : query.clauses()) { if (clause.getQuery() instanceof BooleanQuery) { fixMustNotOnly((BooleanQuery) clause.getQuery()); } if (clause.getOccur() != BooleanClause.Occur.MUST_NOT) { return; } } query.add(new TermQuery(new Term(LuceneFields.L_PARTNAME, LuceneFields.L_PARTNAME_TOP)), BooleanClause.Occur.SHOULD); Set<MailItem.Type> types = context.getParams().getTypes(); if (types.contains(MailItem.Type.CONTACT)) { query.add(new TermQuery(new Term(LuceneFields.L_PARTNAME, LuceneFields.L_PARTNAME_CONTACT)), BooleanClause.Occur.SHOULD); } if (types.contains(MailItem.Type.NOTE)) { query.add(new TermQuery(new Term(LuceneFields.L_PARTNAME, LuceneFields.L_PARTNAME_NOTE)), BooleanClause.Occur.SHOULD); } }
From source file:dcu.com.ie.patent.queryreduction.PatentMagdyQueryReduction.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 a v a 2s . c o m*/ * * @param query * * @return expandedQuery * * @throws IOException * @throws ParseException */ @Override public Query expandQuery(PatentQuery query) throws ParseException, IOException { IndexReader ir = searcher.getIndexReader(); 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); 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; MagdyQueryReduction qe = new MagdyQueryReduction(hits, ir, PatentQuery.getFields()[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 = qe.reduceQuery(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:dcu.com.ie.synset.PatentSynSetQueryExpansion.java
@Override public Query expandQuery(PatentQuery query) throws ParseException, IOException { BooleanQuery bQuery = new BooleanQuery(); BooleanQuery bQueryFieldsExpanded = new BooleanQuery(); BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE); Query expandedQuery = null;//from w ww . j a va 2 s . c om 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)); Query q = qp.parse(query.getQueries()[i]); if (expandedQuery == null) { BooleanQuery bq; if (q instanceof BooleanQuery) { bq = ((BooleanQuery) q).clone(); } else { bq = new BooleanQuery(); bq.add(q, BooleanClause.Occur.SHOULD); } BooleanQuery bq2 = new BooleanQuery(); for (BooleanClause bc : bq.clauses()) { TermQuery tq = (TermQuery) bc.getQuery(); bq2.add(tq, BooleanClause.Occur.SHOULD); // System.err.println(tq.getTerm().text()); List<Map.Entry<String, Double>> l = synset.getSynSeyList(tq.getTerm().text(), Nbr_Terms); for (Map.Entry<String, Double> e : l) { // System.err.println("\t" + e.getKey() + " -> " + e.getValue()); Term term = new Term(PatentQuery.getFields()[i], e.getKey()); TermQuery tq2 = new TermQuery(term); float boost = tq.getBoost(); if (weigth) { boost *= e.getValue().floatValue(); } tq2.setBoost(boost); bq2.add(tq2, BooleanClause.Occur.SHOULD); } } expandedQuery = bq2; } 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); } } 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:de.hybris.platform.solr.search.MultiMaxScoreQParser.java
License:Open Source License
@Override public Query parse() throws SyntaxError { final Query q = super.parse(); if (!(q instanceof BooleanQuery)) { return q; }/*from ww w.j a va 2 s .com*/ final BooleanQuery oldQuery = (BooleanQuery) q; final BooleanQuery.Builder newQuery = new BooleanQuery.Builder(); List<Query> disjuncts = null; for (final BooleanClause clause : oldQuery.clauses()) { if (clause.isProhibited() || clause.isRequired()) { newQuery.add(clause); } else { final Query subQuery = clause.getQuery(); if (!(subQuery instanceof BooleanQuery)) { if (disjuncts == null) { disjuncts = new ArrayList<>(); } disjuncts.add(clause.getQuery()); } else { final List<Query> subQueriesList = new ArrayList<>(); for (final BooleanClause subQueryClause : ((BooleanQuery) subQuery).clauses()) { subQueriesList.add(subQueryClause.getQuery()); } final DisjunctionMaxQuery subDmq = new DisjunctionMaxQuery(subQueriesList, tie); newQuery.add(subDmq, BooleanClause.Occur.SHOULD); } } } if (CollectionUtils.isNotEmpty(disjuncts)) { final DisjunctionMaxQuery disjunctionQuery = new DisjunctionMaxQuery(disjuncts, tie); newQuery.add(disjunctionQuery, BooleanClause.Occur.SHOULD); } return newQuery.build(); }
From source file:de.unihildesheim.iw.lucene.query.RelaxableCommonTermsQuery.java
License:Open Source License
/** * New instance using settings from the supplied {@link Builder} instance. * * @param builder {@link Builder} Instance builder * @throws IOException Thrown on low-level i/o-errors *//*from w w w . j av a 2 s .com*/ @SuppressWarnings({ "ObjectAllocationInLoop", "ObjectEquality" }) RelaxableCommonTermsQuery(@NotNull final Builder builder) throws IOException { // get all query terms assert builder.queryStr != null; assert builder.analyzer != null; this.queryTerms = QueryUtils.tokenizeQueryString(builder.queryStr, builder.analyzer); // list of unique terms contained in the query (stopped, analyzed) final String[] uniqueQueryTerms = this.queryTerms.stream().distinct().toArray(String[]::new); final int uniqueTermsCount = uniqueQueryTerms.length; // heavily based on code from org.apache.lucene.queries.CommonTermsQuery assert builder.reader != null; final List<LeafReaderContext> leaves = builder.reader.leaves(); final int maxDoc = builder.reader.maxDoc(); TermsEnum termsEnum = null; final List<Query> subQueries = new ArrayList<>(10); assert builder.fields != null; for (final String field : builder.fields) { final TermContext[] tcArray = new TermContext[uniqueTermsCount]; final BooleanQuery lowFreq = new BooleanQuery(); final BooleanQuery highFreq = new BooleanQuery(); // collect term statistics for (int i = 0; i < uniqueTermsCount; i++) { final Term term = new Term(field, uniqueQueryTerms[i]); for (final LeafReaderContext context : leaves) { final TermContext termContext = tcArray[i]; final Fields fields = context.reader().fields(); final Terms terms = fields.terms(field); if (terms != null) { // only, if field exists termsEnum = terms.iterator(termsEnum); if (termsEnum != TermsEnum.EMPTY) { if (termsEnum.seekExact(term.bytes())) { if (termContext == null) { tcArray[i] = new TermContext(builder.reader.getContext(), termsEnum.termState(), context.ord, termsEnum.docFreq(), termsEnum.totalTermFreq()); } else { termContext.register(termsEnum.termState(), context.ord, termsEnum.docFreq(), termsEnum.totalTermFreq()); } } } } } // build query if (tcArray[i] == null) { lowFreq.add(new TermQuery(term), builder.lowFreqOccur); } else { if ((builder.maxTermFrequency >= 1f && (float) tcArray[i].docFreq() > builder.maxTermFrequency) || (tcArray[i].docFreq() > (int) Math .ceil((double) (builder.maxTermFrequency * (float) maxDoc)))) { highFreq.add(new TermQuery(term, tcArray[i]), builder.highFreqOccur); } else { lowFreq.add(new TermQuery(term, tcArray[i]), builder.lowFreqOccur); } } final int numLowFreqClauses = lowFreq.clauses().size(); final int numHighFreqClauses = highFreq.clauses().size(); if (builder.lowFreqOccur == Occur.SHOULD && numLowFreqClauses > 0) { lowFreq.setMinimumNumberShouldMatch(numLowFreqClauses); } if (builder.highFreqOccur == Occur.SHOULD && numHighFreqClauses > 0) { highFreq.setMinimumNumberShouldMatch(numHighFreqClauses); } } if (LOG.isDebugEnabled()) { LOG.debug("qLF={}", lowFreq); LOG.debug("qHF={}", highFreq); } if (lowFreq.clauses().isEmpty()) { subQueries.add(highFreq); } else if (highFreq.clauses().isEmpty()) { subQueries.add(lowFreq); } else { final BooleanQuery query = new BooleanQuery(true); // final query query.add(highFreq, Occur.SHOULD); query.add(lowFreq, Occur.MUST); subQueries.add(query); } } if (LOG.isDebugEnabled()) { LOG.debug("qList={}", subQueries); } this.query = subQueries.size() == 1 ? subQueries.get(0) : new DisjunctionMaxQuery(subQueries, 0.1f); if (LOG.isDebugEnabled()) { LOG.debug("RCTQ {} uQt={}", this.query, uniqueQueryTerms); } }
From source file:de.unioninvestment.eai.portal.portlet.crud.domain.model.CompoundSearch.java
License:Apache License
private List<Filter> convertBooleanClauses(Table table, BooleanQuery booleanQuery, boolean ignorePartialErrors) { List<Filter> subList = new ArrayList<Filter>(booleanQuery.getClauses().length); List<RuntimeException> errors = new LinkedList<RuntimeException>(); for (BooleanClause clause : booleanQuery.clauses()) { try {/*w ww . j av a 2 s . c o m*/ Filter subFilter = getFiltersForTable(table, clause.getQuery()); if (subFilter != null) { if (clause.isProhibited()) { subFilter = new Not(asList(subFilter)); } subList.add(subFilter); } } catch (RuntimeException e) { errors.add(e); } } if (ignorePartialErrors) { if (errors.size() < booleanQuery.clauses().size()) { for (RuntimeException e : errors) { LOGGER.info("Ignoring error in 'OR' clause: " + e.getMessage()); } return subList; } } if (errors.size() > 0) { throw errors.get(0); } return subList; }
From source file:de.walware.statet.r.internal.core.rhelp.index.REnvIndexReader.java
License:Open Source License
public boolean search(final RHelpSearchQuery.Compiled query, final List<IRPkgHelp> packageList, final Map<String, IRPkgHelp> packageMap, final IRHelpSearchRequestor requestor) { check();//from www . ja va 2s . c o m try { final SearchQuery internal = (SearchQuery) query.compiled(); final BooleanQuery q = internal.luceneQuery; if (q.clauses().size() <= 1) { for (final IRPkgHelp pkgHelp : packageList) { for (final IRHelpPage page : pkgHelp.getHelpPages()) { requestor.matchFound(new RHelpSearchMatch(page, 1.0f)); } } } else { final RequestStreamCollector collector = new RequestStreamCollector(packageMap, internal, this.indexReader, requestor); this.indexSearcher.search(q, collector); } return true; } catch (final Exception e) { RCorePlugin.log(new Status(IStatus.ERROR, RCore.PLUGIN_ID, -1, "An error occurred in search: " + query.toString() + ".", e)); return false; } }
From source file:edu.rpi.tw.linkipedia.search.query.WeightedQuery.java
License:Open Source License
public Query getRelationQuery(String label, ArrayList<String> weightedContext) { //System.out.println(label+" context size: "+weightedContext.size()); if (weightedContext.size() < 1) return null; BooleanQuery relationQuery = new BooleanQuery(); for (int i = 0; i < weightedContext.size(); i++) { //System.out.println("value: "+weightedContext.get(i)); String context = weightedContext.get(i); //String currentContext = contexts[i].replaceAll("\\(.*\\)", ""); if (context.equals(label)) continue; float weight = 1; if (context.contains("|")) { String[] termWeight = context.split("\\|"); context = termWeight[0];/* ww w. j a v a 2s. com*/ weight = Float.parseFloat(termWeight[1]); } //if(weight > weightThreshold){ Term contextTerm = new Term("related_object", context); PayloadTermQuery contextTermQuery = new PayloadTermQuery(contextTerm, payloadFunctionMax); contextTermQuery.setBoost(weight); if (label.equals("")) { relationQuery.add(contextTermQuery, BooleanClause.Occur.MUST); } else { relationQuery.add(contextTermQuery, BooleanClause.Occur.SHOULD); } //} } if (relationQuery.clauses().size() == 0) return null; return relationQuery; }
From source file:eu.europeana.assets.service.ir.text.bm25f.query.BMBooleanQuery.java
License:Apache License
/** * Builds a query that will use BM25/BM25F ranking function * /*from ww w . j a v a 2s.c o m*/ */ public BMBooleanQuery(String query, Analyzer analyzer, BMParameters bmParams) throws ParseException, IOException { QueryParser qp = new QueryParser(Version.LUCENE_29, bmParams.getMainField(), analyzer); Query q = qp.parse(query); this.bmParams = bmParams; if (q instanceof BooleanQuery) { BooleanQuery bq = (BooleanQuery) q; List<BooleanClause> clauses = bq.clauses(); for (BooleanClause cl : clauses) { cl.getQuery().extractTerms(terms); } } else { q.extractTerms(terms); } }
From source file:io.crate.execution.engine.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).column(); if (columnIdent.isSystemColumn()) { // We can't optimize the initial query because the BooleanQuery // must not contain system columns. return null; }//from w w w .j av a 2s.co m 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, null, null, null, queryShardContext), BooleanClause.Occur.MUST_NOT); } else { booleanQuery.add( fieldType.rangeQuery(value, null, true, false, null, null, null, queryShardContext), BooleanClause.Occur.MUST_NOT); } orderQuery = booleanQuery.build(); } else { if (orderBy.reverseFlags()[i]) { orderQuery = fieldType.rangeQuery(value, null, false, false, null, null, null, queryShardContext); } else { orderQuery = fieldType.rangeQuery(null, value, false, false, null, null, null, queryShardContext); } } queryBuilder.add(orderQuery, BooleanClause.Occur.MUST); } } BooleanQuery query = queryBuilder.build(); if (query.clauses().size() > 0) { return query; } else { return null; } }