/** * Returns an iterator on the clauses in this query. It implements the * {@link Iterable} interface to make it possible to do: * <pre>for (SirenBooleanClause clause : booleanQuery) {}</pre> */ public final Iterator<NodeBooleanClause> iterator() { return this.clauses().iterator(); }
@Override public Query rewrite(final IndexReader reader, final MultiNodeTermQuery query) throws IOException { final NodeBooleanQuery bq = SCORING_BOOLEAN_QUERY_REWRITE.rewrite(reader, query); // TODO: if empty boolean query return NullQuery? if (bq.clauses().isEmpty()) { return bq; } // strip the scores off final Query result = new NodeConstantScoreQuery(bq); result.setBoost(query.getBoost()); return result; }
private void checkBooleanTerms(final NodeTermRangeQuery query, final String... terms) throws IOException { query.setRewriteMethod(new MultiNodeTermQuery.TopTermsScoringNodeBooleanQueryRewrite(50)); final NodeBooleanQuery bq = (NodeBooleanQuery) searcher.rewrite(query); final Set<String> allowedTerms = new HashSet<String>(Arrays.asList(terms)); assertEquals(allowedTerms.size(), bq.clauses().size()); for (final NodeBooleanClause c : bq.clauses()) { assertTrue(c.getQuery() instanceof NodeTermQuery); final NodeTermQuery tq = (NodeTermQuery) c.getQuery(); final String term = tq.getTerm().text(); assertTrue("invalid term: "+ term, allowedTerms.contains(term)); allowedTerms.remove(term); // remove to fail on double terms } assertEquals(0, allowedTerms.size()); }
/** * Tests if a SirenWildcardQuery with an empty term is rewritten to an empty * SirenBooleanQuery */ public void testEmptyTerm() throws IOException { this.addDocument("<nowildcard> <nowildcardx>"); final MultiNodeTermQuery wq = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "")); wq.setRewriteMethod(MultiNodeTermQuery.SCORING_BOOLEAN_QUERY_REWRITE); this.assertMatches(searcher, wq, 0); final Query q = searcher.rewrite(wq); assertTrue(q instanceof NodeBooleanQuery); assertEquals(0, ((NodeBooleanQuery) q).clauses().size()); }