@Test public void testEquality() throws Exception { MultiTermSpanQuery term1 = new MultiTermSpanQuery(new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "aaa*"))); MultiTermSpanQuery term2 = new MultiTermSpanQuery(new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "bbb*"))); assertNotEquals(term1, term2); MultiTermSpanQuery term3 = new MultiTermSpanQuery(new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "aaa*"))); assertEquals(term1, term3); }
@Test public void testSetAncestorPointer() { NodeWildcardQuery term1 = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "aaa*")); MultiTermSpanQuery mtsq = new MultiTermSpanQuery(term1); final TwigQuery twig = new TwigQuery(); mtsq.setAncestorPointer(twig); assertSame(twig, mtsq.getAncestorPointer()); // clauses must have been updated assertSame(twig, term1.getAncestorPointer()); }
@Test public void testSetLevelConstraint() { NodeWildcardQuery term1 = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "aaa*")); MultiTermSpanQuery mtsq = new MultiTermSpanQuery(term1); mtsq.setLevelConstraint(3); assertEquals(3, mtsq.getLevelConstraint()); // Level constraint must have been transferred to the clauses assertEquals(3, mtsq.query.getLevelConstraint()); }
/** * Create a new MultiTermSpanQuery. * * @param query Query to wrap. * <p> * NOTE: This will call {@link MultiNodeTermQuery#setRewriteMethod(MultiNodeTermQuery.RewriteMethod)} * on the wrapped <code>query</code>, changing its rewrite method to a suitable one for spans. * Be sure to not change the rewrite method on the wrapped query afterwards! Doing so will * throw {@link UnsupportedOperationException} on rewriting this query! */ @SuppressWarnings({"rawtypes"}) public MultiTermSpanQuery(Q query) { this.query = query; MultiNodeTermQuery.RewriteMethod method = query.getRewriteMethod(); if (method instanceof TopNodeTermsRewrite) { final int pqsize = ((TopNodeTermsRewrite) method).getSize(); setRewriteMethod(new TopTermsSpanBooleanQueryRewrite(pqsize)); } else { setRewriteMethod(SCORING_SPAN_QUERY_REWRITE); } }
public NodeQuery build(final QueryNode queryNode) throws QueryNodeException { final PrefixWildcardQueryNode wildcardNode = (PrefixWildcardQueryNode) queryNode; final String text = wildcardNode.getText().subSequence(0, wildcardNode.getText().length() - 1).toString(); final NodePrefixQuery q = new NodePrefixQuery(new Term(wildcardNode.getFieldAsString(), text)); // assign the datatype. We must always have a datatype assigned. q.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID)); final MultiNodeTermQuery.RewriteMethod method = (MultiNodeTermQuery.RewriteMethod)queryNode.getTag(MultiNodeTermRewriteMethodProcessor.TAG_ID); if (method != null) { q.setRewriteMethod(method); } // if it is tagged as a span query if (wildcardNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) { return new MultiTermSpanQuery<>(q); } else { return q; } }
public void testFuzzy() throws Exception { NodeFuzzyQuery fq = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "broan")); SpanQuery sfq = new MultiTermSpanQuery<NodeFuzzyQuery>(fq); // will not match quick brown fox PositionRangeSpanQuery sprq = new PositionRangeSpanQuery(sfq, 3, 6); Query query = new LuceneProxyNodeQuery(sprq); assertEquals(2, searcher.search(query, 10).totalHits); }
public void testFuzzy2() throws Exception { // maximum of 1 term expansion NodeFuzzyQuery fq = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "broan"), 1, 0, 1, false); SpanQuery sfq = new MultiTermSpanQuery<NodeFuzzyQuery>(fq); // will only match jumps over lazy broun dog PositionRangeSpanQuery sprq = new PositionRangeSpanQuery(sfq, 0, 100); Query query = new LuceneProxyNodeQuery(sprq); assertEquals(1, searcher.search(query, 10).totalHits); }
public NodeQuery build(QueryNode queryNode) throws QueryNodeException { FuzzyQueryNode fuzzyNode = (FuzzyQueryNode) queryNode; String text = fuzzyNode.getTextAsString(); int numEdits = FuzzyQuery.floatToEdits(fuzzyNode.getSimilarity(), text.codePointCount(0, text.length())); NodeFuzzyQuery fuzzyQuery = new NodeFuzzyQuery(new Term(fuzzyNode.getFieldAsString(), fuzzyNode.getTextAsString()), numEdits, fuzzyNode.getPrefixLength()); // assign the datatype. We must always have a datatype assigned. fuzzyQuery.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID)); // if it is tagged as a span query if (fuzzyNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) { return new MultiTermSpanQuery<>(fuzzyQuery); } else { return fuzzyQuery; } }
public NodeQuery build(final QueryNode queryNode) throws QueryNodeException { final RegexpQueryNode regexpNode = (RegexpQueryNode) queryNode; final NodeRegexpQuery q = new NodeRegexpQuery(new Term(regexpNode.getFieldAsString(), regexpNode.textToBytesRef())); // assign the datatype. We must always have a datatype assigned. q.setDatatype((String) queryNode.getTag(DatatypeQueryNode.DATATYPE_TAGID)); final MultiNodeTermQuery.RewriteMethod method = (MultiNodeTermQuery.RewriteMethod) queryNode.getTag(MultiNodeTermRewriteMethodProcessor.TAG_ID); if (method != null) { q.setRewriteMethod(method); } // if it is tagged as a span query if (regexpNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) { return new MultiTermSpanQuery<>(q); } else { return q; } }
SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch); SpanQuery term = new TermSpanQuery(new Term(DEFAULT_TEST_FIELD, "brown")); SpanQuery near = new NearSpanQuery(new SpanQuery[] { term, spanNoSuch }, 1, true); SpanQuery spanWCNoSuch = new MultiTermSpanQuery<NodeWildcardQuery>(wcNoSuch); near = new NearSpanQuery(new SpanQuery[] { term, spanWCNoSuch }, 1, true); SpanQuery spanRgxNoSuch = new MultiTermSpanQuery<NodeRegexpQuery>(rgxNoSuch); near = new NearSpanQuery(new SpanQuery[] { term, spanRgxNoSuch }, 1, true); query = new LuceneProxyNodeQuery(near); SpanQuery spanPrfxNoSuch = new MultiTermSpanQuery<NodePrefixQuery>(prfxNoSuch);
SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch); SpanQuery term = new TermSpanQuery(new Term(DEFAULT_TEST_FIELD, "brown")); NotSpanQuery notNear = new NotSpanQuery(term, spanNoSuch); SpanQuery spanWCNoSuch = new MultiTermSpanQuery<NodeWildcardQuery>(wcNoSuch); notNear = new NotSpanQuery(term, spanWCNoSuch); query = new LuceneProxyNodeQuery(notNear); SpanQuery spanRgxNoSuch = new MultiTermSpanQuery<NodeRegexpQuery>(rgxNoSuch); notNear = new NotSpanQuery(term, spanRgxNoSuch, 1, 1); query = new LuceneProxyNodeQuery(notNear); SpanQuery spanPrfxNoSuch = new MultiTermSpanQuery<NodePrefixQuery>(prfxNoSuch); notNear = new NotSpanQuery(term, spanPrfxNoSuch, 1, 1); query = new LuceneProxyNodeQuery(notNear);
public NodeQuery build(final QueryNode queryNode) throws QueryNodeException { final TermRangeQueryNode rangeNode = (TermRangeQueryNode) queryNode; final FieldQueryNode upper = rangeNode.getUpperBound(); final FieldQueryNode lower = rangeNode.getLowerBound(); final String field = StringUtils.toString(rangeNode.getField()); String lowerText = lower.getTextAsString(); String upperText = upper.getTextAsString(); if (lowerText.length() == 0) { lowerText = null; } if (upperText.length() == 0) { upperText = null; } final NodeTermRangeQuery rangeQuery = NodeTermRangeQuery.newStringRange(field, lowerText, upperText, rangeNode.isLowerInclusive(), rangeNode.isUpperInclusive()); final MultiNodeTermQuery.RewriteMethod method = (MultiNodeTermQuery.RewriteMethod) queryNode.getTag(MultiNodeTermRewriteMethodProcessor.TAG_ID); if (method != null) { rangeQuery.setRewriteMethod(method); } // if it is tagged as a span query if (rangeNode.getTag(QueryTypeProcessor.QUERYTYPE_TAG) == QueryTypeProcessor.SPAN_QUERYTYPE) { return new MultiTermSpanQuery<>(rangeQuery); } else { return rangeQuery; } }
SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch); SpanQuery term = new TermSpanQuery(new Term(DEFAULT_TEST_FIELD, "brown")); OrSpanQuery near = new OrSpanQuery(new SpanQuery[] { term, spanNoSuch }); assertEquals(1, searcher.search(query, 10).totalHits); NodeWildcardQuery wcNoSuch = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "noSuch*")); SpanQuery spanWCNoSuch = new MultiTermSpanQuery<NodeWildcardQuery>(wcNoSuch); near = new OrSpanQuery(new SpanQuery[] { term, spanWCNoSuch }); query = new LuceneProxyNodeQuery(near); SpanQuery spanRgxNoSuch = new MultiTermSpanQuery<NodeRegexpQuery>(rgxNoSuch); near = new OrSpanQuery(new SpanQuery[] { term, spanRgxNoSuch }); query = new LuceneProxyNodeQuery(near); SpanQuery spanPrfxNoSuch = new MultiTermSpanQuery<NodePrefixQuery>(prfxNoSuch); near = new OrSpanQuery(new SpanQuery[] { term, spanPrfxNoSuch }); query = new LuceneProxyNodeQuery(near);
@Test public void testRegexQueries() throws Exception { BooleanSpanQuery bsq = new BooleanSpanQuery(0, false); bsq.add(tsq("aaa").getQuery(), NodeBooleanClause.Occur.MUST); NodeRegexpQuery regexp = new NodeRegexpQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "s*e")); regexp.setDatatype("http://www.w3.org/2001/XMLSchema#string"); bsq.add(new MultiTermSpanQuery<>(regexp), NodeBooleanClause.Occur.MUST); this._assertSirenQuery(new LuceneProxyNodeQuery(bsq), "(aaa AND /s*e/)~0"); }
@Test public void testFuzzyQueries() throws Exception { BooleanSpanQuery bsq = new BooleanSpanQuery(0, false); bsq.add(tsq("aaa").getQuery(), NodeBooleanClause.Occur.MUST); NodeFuzzyQuery fuzzy = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "bbb")); fuzzy.setDatatype("http://www.w3.org/2001/XMLSchema#string"); bsq.add(new MultiTermSpanQuery<>(fuzzy), NodeBooleanClause.Occur.MUST); this._assertSirenQuery(new LuceneProxyNodeQuery(bsq), "(aaa AND bbb~)~0"); }