/** * Adds a clause to a tuple query. * * @throws TooManyClauses * if the new number of clauses exceeds the maximum clause number * @see #getMaxClauseCount() */ public void add(final NodeBooleanClause clause) { super.addChild(clause.getQuery(), clause.getOccur()); }
private TwigQuery rewriteClauses(TwigQuery clone, final IndexReader reader) throws IOException { for (int i = 0 ; i < clauses.size(); i++) { final NodeBooleanClause c = clauses.get(i); final NodeQuery query = (NodeQuery) c.getQuery().rewrite(reader); if (query != c.getQuery()) { // clause rewrote: must clone if (clone == null) { clone = (TwigQuery) this.clone(); // clone and set root since clone is null, i.e., root has not been rewritten clone.root = (NodeQuery) this.root.clone(); // copy ancestor clone.root.setAncestorPointer(ancestor); } // set root as ancestor query.setAncestorPointer(clone.root); clone.clauses.set(i, new NodeBooleanClause(query, c.getOccur())); } } return clone; }
private BooleanSpanQueryBuilder(final BooleanBag[] clauses) { bsq = new BooleanSpanQuery(0, false); for (final BooleanBag bag : clauses) { for (final NodeBooleanClause clause : bag.toNodeBooleanClauses()) { bsq.add((SpanQuery) clause.getQuery(), clause.getOccur()); } } }
public BooleanSpanQueryBuilder slop(final int slop) { BooleanSpanQuery bsq = new BooleanSpanQuery(slop, this.bsq.isInOrder()); for (final NodeBooleanClause clause : this.bsq.getClauses()) { bsq.add((SpanQuery) clause.getQuery(), clause.getOccur()); } this.bsq = bsq; return this; }
clone.clauses.set(i, new NodeBooleanClause(query, c.getOccur()));
public BooleanSpanQueryBuilder inOrder(final boolean inOrder) { BooleanSpanQuery bsq = new BooleanSpanQuery(this.bsq.getSlop(), inOrder); for (final NodeBooleanClause clause : this.bsq.getClauses()) { bsq.add((SpanQuery) clause.getQuery(), clause.getOccur()); } this.bsq = bsq; return this; }
@Test public void testTwigWithVariableAsChildWithoutMust() throws QueryNodeException { String query = "{" + "\"twig\" : {" + "\"child\" : [ {" + "\"variable\" : {}" + "} ]" + "}" +"}"; Query q = new ExtendedTreeQueryParser().parse(query, ""); com.sindicetech.siren.search.node.NodeQuery nq = ((LuceneProxyNodeQuery)q).getNodeQuery(); assertThat(nq, instanceOf(com.sindicetech.siren.search.node.TwigQuery.class)); assertThat(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0], instanceOf(NodeBooleanClause.class)); assertThat(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0].getQuery(), instanceOf(NodeVariableQuery.class)); // Occur has to be SHOULD by default. See the comment in ChildPropertyParser for explanation assertEquals(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0].getOccur() , Occur.SHOULD); }
@Test public void testTwigWithVariableAsChild() throws QueryNodeException { String query = "{" + "\"twig\" : {" + "\"child\" : [ {" + "\"occur\" : \"MUST\"," + "\"variable\" : {}" + "} ]" + "}" +"}"; Query q = new ExtendedTreeQueryParser().parse(query, ""); com.sindicetech.siren.search.node.NodeQuery nq = ((LuceneProxyNodeQuery)q).getNodeQuery(); assertThat(nq, instanceOf(com.sindicetech.siren.search.node.TwigQuery.class)); assertThat(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0] , instanceOf(NodeBooleanClause.class)); assertThat(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0].getQuery() , instanceOf(NodeVariableQuery.class)); // Occur has to be rewritten to SHOULD in ChildPropertyParser - see the comment there for explanation assertEquals(((com.sindicetech.siren.search.node.TwigQuery)nq).getClauses()[0].getOccur() , Occur.SHOULD); }
@Test public void testTwigWithChildWithMissingOccur() throws QueryNodeException { final ExtendedTreeQueryParser parser = new ExtendedTreeQueryParser(); final String query = "{ \"twig\" : { \"child\" : " + "[ { \"node\" : { \"query\" : \"aaa\" } } ] " + "} }"; Query q = parser.parse(query, ""); // should not throw exception assertTrue(q instanceof LuceneProxyNodeQuery); q = ((LuceneProxyNodeQuery) q).getNodeQuery(); assertTrue(q instanceof com.sindicetech.siren.search.node.TwigQuery); Occur occur = ((com.sindicetech.siren.search.node.TwigQuery) q).getClauses()[0].getOccur(); assertEquals(parser.getDefaultOperator() == StandardQueryConfigHandler.Operator.AND ? Occur.MUST : Occur.SHOULD, occur); }