@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(tq); }
@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; }
/** Returns true iff <code>o</code> is equal to this. */ @Override public boolean equals(final Object o) { if (!(o instanceof LuceneProxyNodeQuery)) return false; final LuceneProxyNodeQuery other = (LuceneProxyNodeQuery) o; return (this.getBoost() == other.getBoost()) && this.nodeQuery.equals(other.nodeQuery); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(ntq); }
@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); }
@Override public int hashCode() { return Float.floatToIntBits(this.getBoost()) ^ nodeQuery.hashCode(); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(nbq); }
@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(); }
public static LuceneProxyNodeQuery dq(final NodeQuery nq) { return new LuceneProxyNodeQuery(nq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(nmq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(npq); }
@Override public Query getLuceneProxyQuery() { return new LuceneProxyNodeQuery(twq); }
@Override public Query build(final QueryNode queryNode) throws QueryNodeException { final TopLevelQueryNode topNode = (TopLevelQueryNode) queryNode; final QueryNode child = topNode.getChildren().get(0); final Object obj = child.getTag(QueryTreeBuilder.QUERY_TREE_BUILDER_TAGID); if (child instanceof BooleanQueryNode) { // no need to wrap the query object into a lucene proxy query return (Query) obj; } else { return new LuceneProxyNodeQuery((NodeQuery) obj); } }
/** * Wraps a {@link NodeQuery} into a {@link LuceneProxyNodeQuery}. * This method is applied on each clause of a {@link BooleanQuery}. */ private Query wrap(final Query q) throws QueryNodeException { if (q instanceof BooleanQuery) { for (final BooleanClause clause: ((BooleanQuery) q).clauses()) { final Query cq = clause.getQuery(); clause.setQuery(this.wrap(cq)); } return q; } else if (q instanceof NodeQuery) { return new LuceneProxyNodeQuery((NodeQuery) q); } else { throw new QueryNodeException(new Error("Expected a BooleanQuery or a NodeQuery: got '" + q.getClass().getCanonicalName() + "'")); } }
public BooleanClause[] toBooleanClauses() { final BooleanClause[] clauses = new BooleanClause[queries.size()]; for (int i = 0; i < clauses.length; i++) { Query q = queries.get(i); if (q instanceof NodeQuery) { q = new LuceneProxyNodeQuery((NodeQuery) q); } final BooleanClause.Occur occur; if (isMust) { occur = BooleanClause.Occur.MUST; } else if (isNot) { occur = BooleanClause.Occur.MUST_NOT; } else if (isShould) { occur = BooleanClause.Occur.SHOULD; } else { // Shouldn't happen throw new IllegalArgumentException("No occurrence could be built!"); } clauses[i] = new BooleanClause(q, occur); } return clauses; }
@Test public void testWildcardQuery2() throws Exception { final NodeQuery q1 = new NodeWildcardQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "st*e.ca?as")); this._assertSirenQuery(new LuceneProxyNodeQuery(q1), "st*e.ca?as"); }
@Test public void testRegexQueries() throws Exception { final Query reg = new LuceneProxyNodeQuery( new NodeRegexpQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "s*e")) ); this._assertSirenQuery(reg, "/s*e/"); }
@Test public void testFuzzyQuery2() throws Exception { final NodeQuery q1 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "michel")); this._assertSirenQuery(new LuceneProxyNodeQuery(q1), "michel~"); final TwigQuery q2 = new TwigQuery(1); q2.addChild(q1, NodeBooleanClause.Occur.MUST); this._assertSirenQuery(new LuceneProxyNodeQuery(q2), "* : michel~"); final int numEdits = FuzzyQuery.floatToEdits(0.8f, "michel".codePointCount(0, "michel".length())); final NodeQuery q3 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "michel"), numEdits); this._assertSirenQuery(new LuceneProxyNodeQuery(q3), "michel~0.8"); // first tilde is escaped, not the second one final NodeQuery q4 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "http://sw.deri.org/~aida")); this._assertSirenQuery(new LuceneProxyNodeQuery(q4), "'http://sw.deri.org/~aida'~"); }
@Test public void testPrefixQuery() throws Exception { final Query ntq = new LuceneProxyNodeQuery( new NodePrefixQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "lit")) ); this._assertSirenQuery(ntq, "lit*"); final TwigQuery twq = new TwigQuery(1); twq.addChild(new NodePrefixQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "lit")), NodeBooleanClause.Occur.MUST); this._assertSirenQuery(new LuceneProxyNodeQuery(twq), "* : lit*"); }
@Test public void testQNameInDatatype() throws Exception { final String qnames = "./src/test/resources/conf/qnames"; final HashMap<ConfigurationKey, Object> config = new HashMap<ConfigurationKey, Object>(); config.put(KeywordConfigurationKeys.QNAMES, this.loadQNamesFile(qnames)); final Map<String, Analyzer> dts = new HashMap<String, Analyzer>(); dts.put(XSDDatatype.XSD_LONG, new LongNumericAnalyzer(4)); config.put(KeywordConfigurationKeys.DATATYPES_ANALYZERS, dts); final NodeNumericRangeQuery q = NodeNumericRangeQuery.newLongRange(SirenTestCase.DEFAULT_TEST_FIELD, 4, 50l, 60l, true, false); q.setDatatype(XSDDatatype.XSD_LONG); this._assertSirenQuery(config, new LuceneProxyNodeQuery(q), "xsd:long([50 TO 60})"); }