@Override protected NodeBooleanQuery getTopLevelQuery(final NodeQuery query) { NodeBooleanQuery q = new NodeBooleanQuery(); // set level and node constraints q.setLevelConstraint(query.getLevelConstraint()); q.setNodeConstraint(query.getNodeConstraint()[0], query.getNodeConstraint()[1]); // set ancestor q.setAncestorPointer(query.ancestor); return q; }
@Override protected NodeBooleanQuery getTopLevelQuery(final NodeQuery query) { NodeBooleanQuery q = new NodeBooleanQuery(); // set level and node constraints q.setLevelConstraint(query.getLevelConstraint()); q.setNodeConstraint(query.getNodeConstraint()[0], query.getNodeConstraint()[1]); // set ancestor q.setAncestorPointer(query.ancestor); return q; }
@Override protected NodeBooleanQuery getTopLevelQuery(final NodeQuery query) { NodeBooleanQuery q = new NodeBooleanQuery(); // set level and node constraints q.setLevelConstraint(query.getLevelConstraint()); q.setNodeConstraint(query.getNodeConstraint()[0], query.getNodeConstraint()[1]); // set ancestor q.setAncestorPointer(query.ancestor); return q; }
@Override protected NodeBooleanQuery getTopLevelQuery(final NodeQuery query) { NodeBooleanQuery q = new NodeBooleanQuery(); // set level and node constraints q.setLevelConstraint(query.getLevelConstraint()); q.setNodeConstraint(query.getNodeConstraint()[0], query.getNodeConstraint()[1]); // set ancestor q.setAncestorPointer(query.ancestor); return q; }
@Override protected OrSpanQuery getTopLevelQuery(final NodeQuery query) { OrSpanQuery q = new OrSpanQuery(); // set level and node constraints q.setLevelConstraint(query.getLevelConstraint()); q.setNodeConstraint(query.getNodeConstraint()[0], query.getNodeConstraint()[1]); // set ancestor q.setAncestorPointer(query.getAncestorPointer()); return q; }
@Test public void testLevelAndNodeConstraintPropagation() throws IOException { final TwigQuery tq1 = new TwigQuery(2); tq1.addDescendant(2, new NodeTermQuery(new Term("field", "aaa")), NodeBooleanClause.Occur.MUST); tq1.setNodeConstraint(1,2); final TwigQuery tq2 = new TwigQuery(2); tq2.addChild(new NodeTermQuery(new Term("field", "bbb")), NodeBooleanClause.Occur.MUST); final BooleanSpanQuery bsq1 = new BooleanSpanQuery(0, true); bsq1.add(new NodeSpanQuery(tq1), NodeBooleanClause.Occur.MUST); bsq1.add(new NodeSpanQuery(tq2), NodeBooleanClause.Occur.MUST); // Level constraints applied on the twig must not be modified assertEquals(2, tq1.getLevelConstraint()); assertEquals(4, tq1.clauses().get(0).getQuery().getLevelConstraint()); assertEquals(2, tq2.getLevelConstraint()); assertEquals(3, tq2.clauses().get(0).getQuery().getLevelConstraint()); // Node constraints applied on the twig must not be modified assertEquals(1, tq1.getNodeConstraint()[0]); assertEquals(2, tq1.getNodeConstraint()[1]); // Constraints should not be modified after a rewrite final BooleanSpanQuery rewritten = (BooleanSpanQuery) bsq1.rewrite(reader); NodeSpanQuery nodeSpanQuery = (NodeSpanQuery) rewritten.getClauses()[0].getQuery(); assertEquals(2, nodeSpanQuery.getQuery().getLevelConstraint()); assertEquals(1, nodeSpanQuery.getQuery().getNodeConstraint()[0]); assertEquals(2, nodeSpanQuery.getQuery().getNodeConstraint()[1]); nodeSpanQuery = (NodeSpanQuery) rewritten.getClauses()[1].getQuery(); assertEquals(2, nodeSpanQuery.getQuery().getLevelConstraint()); }