List of usage examples for org.apache.lucene.search BooleanQuery getMaxClauseCount
public static int getMaxClauseCount()
From source file:com.sindicetech.siren.qparser.keyword.builders.BooleanQueryNodeBuilder.java
License:Open Source License
public Query build(final QueryNode queryNode) throws QueryNodeException { final BooleanQueryNode booleanNode = (BooleanQueryNode) queryNode; final BooleanQuery bQuery = new BooleanQuery(); final List<QueryNode> children = booleanNode.getChildren(); if (children != null) { for (final QueryNode child : children) { final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID); if (obj != null) { final Query query = (Query) obj; try { final QueryNode mod; if (child instanceof DatatypeQueryNode) { mod = ((DatatypeQueryNode) child).getChild(); } else { mod = child;/*w w w . j a va2 s .c o m*/ } bQuery.add(query, getModifierValue(mod)); } catch (final TooManyClauses ex) { throw new QueryNodeException(new MessageImpl(QueryParserMessages.TOO_MANY_BOOLEAN_CLAUSES, BooleanQuery.getMaxClauseCount(), queryNode.toQueryString(new EscapeQuerySyntaxImpl())), ex); } } } } return bQuery; }
From source file:com.sindicetech.siren.qparser.tree.builders.BooleanQueryNodeBuilder.java
License:Open Source License
private final BooleanSpanQuery buildBooleanSpanQuery(BooleanQueryNode booleanNode) throws QueryNodeException { // check if the node has a slop int slop = this.DEFAULT_SLOP; if (booleanNode.getTag(SlopPropertyParser.SLOP_PROPERTY) != null) { slop = (Integer) booleanNode.getTag(SlopPropertyParser.SLOP_PROPERTY); }//w ww. j a va 2 s . c o m // check if the node has a inOrder flag boolean inOrder = this.DEFAULT_INORDER; if (booleanNode.getTag(InOrderPropertyParser.IN_ORDER_PROPERTY) != null) { int tag = (Integer) booleanNode.getTag(InOrderPropertyParser.IN_ORDER_PROPERTY); inOrder = tag == 0 ? false : true; } // build the query and add clauses final BooleanSpanQuery bsq = new BooleanSpanQuery(slop, inOrder); for (final QueryNode child : booleanNode.getChildren()) { final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID); try { bsq.add(new NodeSpanQuery((NodeQuery) obj), this.getNodeModifierValue(child)); } catch (final BooleanQuery.TooManyClauses ex) { throw new QueryNodeException(new MessageImpl(QueryParserMessages.TOO_MANY_BOOLEAN_CLAUSES, BooleanQuery.getMaxClauseCount(), booleanNode.toQueryString(new EscapeQuerySyntaxImpl())), ex); } } // check if the node has a node range constraint if (booleanNode.getTag(RangePropertyParser.RANGE_PROPERTY) != null) { final int[] range = (int[]) booleanNode.getTag(RangePropertyParser.RANGE_PROPERTY); bsq.setNodeConstraint(range[0], range[1]); } return bsq; }
From source file:com.sindicetech.siren.qparser.tree.builders.BooleanQueryNodeBuilder.java
License:Open Source License
private final BooleanQuery buildBooleanQuery(BooleanQueryNode booleanNode) throws QueryNodeException { // build the query and add clauses final BooleanQuery bq = new BooleanQuery(true); for (final QueryNode child : booleanNode.getChildren()) { final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID); try {//from w w w . j av a 2 s . co m Query q = (Query) obj; if (obj instanceof NodeQuery) { // wrap the query into a LuceneProxyNodeQuery q = new LuceneProxyNodeQuery((NodeQuery) q); } bq.add(q, this.getLuceneModifierValue(child)); } catch (final BooleanQuery.TooManyClauses ex) { throw new QueryNodeException(new MessageImpl(QueryParserMessages.TOO_MANY_BOOLEAN_CLAUSES, BooleanQuery.getMaxClauseCount(), booleanNode.toQueryString(new EscapeQuerySyntaxImpl())), ex); } } return bq; }
From source file:com.sindicetech.siren.qparser.tree.builders.TwigQueryNodeBuilder.java
License:Open Source License
@Override public TwigQuery build(final QueryNode queryNode) throws QueryNodeException { final TwigQueryNode twigNode = (TwigQueryNode) queryNode; final List<QueryNode> children = twigNode.getChildren(); final TwigQuery query = new TwigQuery(); // check if the node has a level constraint if (twigNode.getTag(LevelPropertyParser.LEVEL_PROPERTY) != null) { query.setLevelConstraint((Integer) twigNode.getTag(LevelPropertyParser.LEVEL_PROPERTY)); }// w w w . j a v a2 s. c o m // check if the node has a node range constraint if (twigNode.getTag(RangePropertyParser.RANGE_PROPERTY) != null) { final int[] range = (int[]) twigNode.getTag(RangePropertyParser.RANGE_PROPERTY); query.setNodeConstraint(range[0], range[1]); } // process root query this.processRoot(twigNode, query); // process child and descendant queries try { this.processChildren(children, query); } catch (final TooManyClauses ex) { throw new QueryNodeException(new MessageImpl(QueryParserMessages.TOO_MANY_BOOLEAN_CLAUSES, BooleanQuery.getMaxClauseCount(), twigNode.toQueryString(new EscapeQuerySyntaxImpl())), ex); } return query; }
From source file:de.ilias.services.lucene.search.RPCSearchHandler.java
License:Open Source License
/** * Multi field searcher/*from ww w . jav a2 s . c o m*/ * Searches in all defined fields. * @todo allow configuration of searchable fields. * * * @param clientKey * @param query */ public String search(String clientKey, String queryString, int pageNumber) { LuceneSettings luceneSettings; LocalSettings.setClientKey(clientKey); IndexSearcher searcher; FieldInfo fieldInfo; String rewrittenQuery; logger.info("Query is: " + queryString); try { long start = new java.util.Date().getTime(); fieldInfo = FieldInfo.getInstance(LocalSettings.getClientKey()); luceneSettings = LuceneSettings.getInstance(LocalSettings.getClientKey()); // Append doctype searcher = SearchHolder.getInstance().getSearcher(); // Rewrite query QueryRewriter rewriter = new QueryRewriter(QueryRewriter.MODE_SEARCH, queryString); rewrittenQuery = rewriter.rewrite(); Vector<Occur> occurs = new Vector<Occur>(); for (int i = 0; i < fieldInfo.getFieldSize(); i++) { occurs.add(BooleanClause.Occur.SHOULD); } MultiFieldQueryParser multiParser = new MultiFieldQueryParser(fieldInfo.getFieldsAsStringArray(), new StandardAnalyzer()); if (luceneSettings.getDefaultOperator() == LuceneSettings.OPERATOR_AND) { multiParser.setDefaultOperator(Operator.AND); } else { multiParser.setDefaultOperator(Operator.OR); } BooleanQuery.setMaxClauseCount(10000); BooleanQuery query = (BooleanQuery) multiParser.parse(rewrittenQuery); logger.info("Max clauses allowed: " + BooleanQuery.getMaxClauseCount()); //BooleanQuery query = (BooleanQuery) MultiFieldQueryParser.parse(rewrittenQuery, // fieldInfo.getFieldsAsStringArray(), // occurs.toArray(new Occur[0]), // new StandardAnalyzer()); for (Object f : fieldInfo.getFields()) { logger.info(((String) f).toString()); } TopDocCollector collector = new TopDocCollector(1000); long s_start = new java.util.Date().getTime(); searcher.search(query, collector); long s_end = new java.util.Date().getTime(); ScoreDoc[] hits = collector.topDocs().scoreDocs; SearchResultWriter writer = new SearchResultWriter(hits); writer.setOffset(SearchHolder.SEARCH_LIMIT * (pageNumber - 1)); writer.write(); long end = new java.util.Date().getTime(); logger.info("Total time: " + (end - start)); logger.info("Query time: " + (s_end - s_start)); return writer.toXML(); } catch (ConfigurationException e) { logger.error(e); } catch (IOException e) { logger.warn(e); } catch (ParseException e) { logger.info(e); } catch (Exception e) { StringWriter writer = new StringWriter(); e.printStackTrace(new PrintWriter(writer)); logger.error(writer.toString()); } return ""; }
From source file:edu.cmu.lti.oaqa.knn4qa.cand_providers.LuceneCandidateProvider.java
License:Apache License
@Override public CandidateInfo getCandidates(int queryNum, Map<String, String> queryData, int maxQty) throws Exception { ArrayList<CandidateEntry> resArr = new ArrayList<CandidateEntry>(); String queryID = queryData.get(ID_FIELD_NAME); if (null == queryID) { throw new Exception( String.format("Query id (%s) is undefined for query # %d", ID_FIELD_NAME, queryNum)); }//from w ww . j av a 2s. co m String text = queryData.get(TEXT_FIELD_NAME); if (null == text) { throw new Exception(String.format("Query (%s) is undefined for query # %d", TEXT_FIELD_NAME, queryNum)); } String query = text.trim(); ArrayList<String> toks = new ArrayList<String>(); for (String s : mSpaceSplit.split(query)) { toks.add(s); } if (2 * toks.size() > BooleanQuery.getMaxClauseCount()) { // This a heuristic, but it should work fine in many cases BooleanQuery.setMaxClauseCount(2 * toks.size()); } int numFound = 0; if (!query.isEmpty()) { // QueryParser cannot be shared among threads! QueryParser parser = new QueryParser(TEXT_FIELD_NAME, mAnalyzer); parser.setDefaultOperator(QueryParser.OR_OPERATOR); Query queryParsed = parser.parse(query); TopDocs hits = mSearcher.search(queryParsed, maxQty); numFound = hits.totalHits; ScoreDoc[] scoreDocs = hits.scoreDocs; for (ScoreDoc oneHit : scoreDocs) { Document doc = mSearcher.doc(oneHit.doc); String id = doc.get(ID_FIELD_NAME); float score = oneHit.score; resArr.add(new CandidateEntry(id, score)); } } CandidateEntry[] results = resArr.toArray(new CandidateEntry[resArr.size()]); Arrays.sort(results); return new CandidateInfo(numFound, results); }
From source file:edu.cmu.lti.oaqa.knn4qa.cand_providers.TranRecSortByProb.java
License:Apache License
@Override public CandidateInfo getCandidates(int queryNum, Map<String, String> queryData, int maxQty) throws Exception { ArrayList<CandidateEntry> resArr = new ArrayList<CandidateEntry>(); String queryID = queryData.get(ID_FIELD_NAME); if (null == queryID) { throw new Exception( String.format("Query id (%s) is undefined for query # %d", ID_FIELD_NAME, queryNum)); }//from w ww . j av a2 s .co m String text = queryData.get(TEXT_FIELD_NAME); if (null == text) { throw new Exception(String.format("Query (%s) is undefined for query # %d", TEXT_FIELD_NAME, queryNum)); } String origQuery = text.trim(); int numFound = 0; if (!origQuery.isEmpty()) { StringBuffer queryToks = new StringBuffer(); int tokQty = 0; for (String w : origQuery.split("\\s+")) if (!w.isEmpty()) { tokQty++; queryToks.append(w + " "); final WordEntry we = mFieldIndex.getWordEntry(w); if (we != null) { GizaOneWordTranRecs rec0 = mAnswToQuestTran.getTranProbs(we.mWordId); if (rec0 != null) { TranRecSortByProb rec[] = new TranRecSortByProb[rec0.mDstIds.length]; for (int i = 0; i < rec0.mDstIds.length; ++i) rec[i] = new TranRecSortByProb(rec0.mDstIds[i], rec0.mProbs[i]); Arrays.sort(rec); int qty = mTopTranQty; for (int i = 0; i < Math.min(rec.length, qty); ++i) { int dstId = rec[i].mDstWorId; if (dstId != we.mWordId) { queryToks.append(mFieldIndex.getWord(dstId) + (mUseWeights ? "^" + String.format("%.3f", rec[i].mProb) : "") + " "); ++tokQty; } else { // If we skip a word, b/c it's the same as the query word // we will get one more candidate so that exactly Math.min(mTopTranQty, rec.length) // words were added ++qty; } } } } } synchronized (lock) { // this is a static lock, it will block all instance of this class if (tokQty > BooleanQuery.getMaxClauseCount()) { BooleanQuery.setMaxClauseCount(tokQty); } } String luceneQuery = queryToks.toString().trim(); if (!luceneQuery.isEmpty()) { // QueryParser cannot be shared among threads! QueryParser parser = new QueryParser(TEXT_FIELD_NAME, mAnalyzer); parser.setDefaultOperator(QueryParser.OR_OPERATOR); Query queryParsed = parser.parse(luceneQuery); //System.out.println("The resulting query: " + luceneQuery.toString()); TopDocs hits = mSearcher.search(queryParsed, maxQty); numFound = hits.totalHits; ScoreDoc[] scoreDocs = hits.scoreDocs; for (ScoreDoc oneHit : scoreDocs) { Document doc = mSearcher.doc(oneHit.doc); String id = doc.get(ID_FIELD_NAME); float score = oneHit.score; resArr.add(new CandidateEntry(id, score)); } } } CandidateEntry[] results = resArr.toArray(new CandidateEntry[resArr.size()]); Arrays.sort(results); return new CandidateInfo(numFound, results); }
From source file:lucene.LuceneCandidateProvider.java
License:Apache License
public ResEntry[] getCandidates(int queryNum, String query, int maxQty) throws Exception { ArrayList<String> toks = new ArrayList<String>(); for (String s : mSpaceSplit.split(query)) { toks.add(s);/*from www . j a va 2 s.c o m*/ } if (2 * toks.size() > BooleanQuery.getMaxClauseCount()) { // This a heuristic, but it should work fine in many cases BooleanQuery.setMaxClauseCount(2 * toks.size()); } ArrayList<ResEntry> resArr = new ArrayList<ResEntry>(); Query queryParsed = mParser.parse(query); TopDocs hits = mSearcher.search(queryParsed, maxQty); ScoreDoc[] scoreDocs = hits.scoreDocs; for (ScoreDoc oneHit : scoreDocs) { Document doc = mSearcher.doc(oneHit.doc); String id = doc.get(UtilConst.FIELD_ID); float score = oneHit.score; resArr.add(new ResEntry(id, score)); } ResEntry[] results = resArr.toArray(new ResEntry[resArr.size()]); Arrays.sort(results); return results; }
From source file:nl.uva.DataHandler.Retrieval.java
private ScoreDoc[] searchIndex(String qText, Filter filter) throws IOException, Throwable { log.info("size of query: " + qText.length()); boolean retry = true; ScoreDoc[] hits = null;/*ww w. ja v a 2 s . com*/ while (retry) { try { retry = false; Query q = this.queryCreator(qText); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerReq); this.iSearcher.search(q, filter, collector); // this.iSearcher.search(q, collector); hits = collector.topDocs().scoreDocs; return hits; } // catch (BooleanQuery.TooManyClauses e) catch (Exception e) { // Double the number of boolean queries allowed. // The default is in org.apache.lucene.search.BooleanQuery and is 1024. String defaultQueries = Integer.toString(BooleanQuery.getMaxClauseCount()); int oldQueries = Integer .parseInt(System.getProperty("org.apache.lucene.maxClauseCount", defaultQueries)); int newQueries = oldQueries * 2; log.error("Too many hits for query..., changing maxClauseCount to: " + newQueries); // log.error("Too many hits for query: " + oldQueries + ". Increasing to " + newQueries, e); System.setProperty("org.apache.lucene.maxClauseCount", Integer.toString(newQueries)); BooleanQuery.setMaxClauseCount(newQueries); retry = true; } } return hits; }
From source file:org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryParser.java
License:Open Source License
/** * /*from ww w. j a v a2 s .com*/ * @param mpq MultiPhraseQuery * @return boolean */ private boolean exceedsTermCount(MultiPhraseQuery mpq) { int termCount = 0; for (Iterator<?> iter = mpq.getTermArrays().iterator(); iter.hasNext(); /**/) { Term[] arr = (Term[]) iter.next(); termCount += arr.length; if (termCount > BooleanQuery.getMaxClauseCount()) { return true; } } return false; }