@Override public Query clone() { NodeQuery nodeClone = (NodeQuery) nodeQuery.clone(); LuceneProxyNodeQuery proxyClone = new LuceneProxyNodeQuery(nodeClone); return proxyClone; }
@Override public Query rewrite(final IndexReader reader) throws IOException { final Query rewroteQuery = nodeQuery.rewrite(reader); if (nodeQuery == rewroteQuery) { return this; } final LuceneProxyNodeQuery q = new LuceneProxyNodeQuery((NodeQuery) rewroteQuery); q.setBoost(nodeQuery.getBoost()); return q; }
@Override public int hashCode() { return Float.floatToIntBits(this.getBoost()) ^ nodeQuery.hashCode(); }
((LuceneProxyNodeQuery) inspectedQueryNode).getNodeQuery(), actualJsonPath, variablesPaths, queries); return;
/** * Checks that a keyword query that returns an {@link org.apache.lucene.queryparser.flexible.core.nodes.MatchNoDocsQueryNode} * is converted into an empty {@link com.sindicetech.siren.search.node.NodeBooleanQuery}. * * See #73. */ @Test public void testKeywordParserReturnsMatchNoDoc() throws QueryNodeException { final ConciseTreeQueryParser parser = new ConciseTreeQueryParser(); final Query output = parser.parse("{\"node\":{\"query\":\"\"}}", ""); assertTrue(output instanceof LuceneProxyNodeQuery); com.sindicetech.siren.search.node.NodeQuery nodeQuery = ((LuceneProxyNodeQuery) output).getNodeQuery(); assertTrue(nodeQuery instanceof NodeBooleanQuery); assertTrue(((NodeBooleanQuery) nodeQuery).clauses().isEmpty()); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(bsq); }
@Test public void testBoost() throws Exception { final float boost = 2.5f; this.addDocument("\"aaa ccc\" \"one five\" . \"aaa bbb\" \"ccc eee\" ."); BooleanQuery bq1 = new BooleanQuery(); NodeTermQuery tq = new NodeTermQuery(new Term (DEFAULT_TEST_FIELD, "one")); tq.setBoost(boost); bq1.add(new LuceneProxyNodeQuery(tq), Occur.MUST); bq1.add(new LuceneProxyNodeQuery(new NodeTermQuery(new Term (DEFAULT_TEST_FIELD, "five"))), Occur.MUST); BooleanQuery bq2 = new BooleanQuery(); tq = new NodeTermQuery(new Term (DEFAULT_TEST_FIELD, "one")); LuceneProxyNodeQuery dq = new LuceneProxyNodeQuery(tq); dq.setBoost(boost); bq2.add(dq, Occur.MUST); bq2.add(new LuceneProxyNodeQuery(new NodeTermQuery(new Term (DEFAULT_TEST_FIELD, "five"))), Occur.MUST); assertScoreEquals(bq1, bq2); }
@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); }
@Override public String toString(final String field) { final StringBuffer buffer = new StringBuffer(); final boolean withParen = (this.getBoost() != 1.0) || (nodeQuery instanceof TwigQuery); if (withParen) { buffer.append('('); } buffer.append(nodeQuery.toString(field)); if (withParen) { buffer.append(')').append(ToStringUtils.boost(this.getBoost())); } return buffer.toString(); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(npq); }
@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); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(tsq); }
@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); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(tq); }
Query output = parser.parse(twig.toString(), ""); LuceneProxyNodeQuery q = (LuceneProxyNodeQuery) output; com.sindicetech.siren.search.node.TwigQuery t = (com.sindicetech.siren.search.node.TwigQuery) q.getNodeQuery(); com.sindicetech.siren.search.node.NodeQuery root = t.getRoot(); t = (com.sindicetech.siren.search.node.TwigQuery) q.getNodeQuery(); root = t.getRoot();
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(twq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(nmq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(ntq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(nbq); }
public static LuceneProxyNodeQuery dq(final NodeQuery nq) { return new LuceneProxyNodeQuery(nq); }