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; } }
@Test public void testFuzzyQuery() throws Exception { ConciseKeywordQueryParser parser = new ConciseKeywordQueryParser(); parser.setAttribute("aaa"); // must have a prefix length of 4 NodeFuzzyQuery q = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "aaa:michel"), NodeFuzzyQuery.defaultMaxEdits, 4); q.setDatatype("http://www.w3.org/2001/XMLSchema#string"); assertEquals(q, parser.parse("michel~", SirenTestCase.DEFAULT_TEST_FIELD)); // with no attribute defined parser = new ConciseKeywordQueryParser(); q = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "michel")); q.setDatatype("http://www.w3.org/2001/XMLSchema#string"); assertEquals(q, parser.parse("michel~", SirenTestCase.DEFAULT_TEST_FIELD)); }
/** Test the {@link TopTermsBoostOnlyNodeBooleanQueryRewrite} rewrite method. */ @Test public void testBoostOnlyRewrite() throws Exception { this.addDocument("<Lucene>"); this.addDocument("<Lucene>"); this.addDocument("<Lucenne>"); final NodeFuzzyQuery query = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "Lucene")); query.setRewriteMethod(new MultiNodeTermQuery.TopTermsBoostOnlyNodeBooleanQueryRewrite(50)); final ScoreDoc[] hits = searcher.search(dq(query), null, 1000).scoreDocs; assertEquals(3, hits.length); }
@Test public void testFuzzyQuery2() throws Exception { final NodeFuzzyQuery q1 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "michel")); q1.setDatatype("http://www.w3.org/2001/XMLSchema#string"); 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 NodeFuzzyQuery q3 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "michel"), numEdits); q3.setDatatype("http://www.w3.org/2001/XMLSchema#string"); this._assertSirenQuery(new LuceneProxyNodeQuery(q3), "michel~0.8"); // first tilde is escaped, not the second one final NodeFuzzyQuery q4 = new NodeFuzzyQuery(new Term(SirenTestCase.DEFAULT_TEST_FIELD, "http://sw.deri.org/~aida")); q4.setDatatype("http://www.w3.org/2001/XMLSchema#string"); this._assertSirenQuery(new LuceneProxyNodeQuery(q4), "'http://sw.deri.org/~aida'~"); }
public void testEquals() { final NodeWildcardQuery wq1 = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "b*a")); final NodeWildcardQuery wq2 = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "b*a")); final NodeWildcardQuery wq3 = new NodeWildcardQuery(new Term(DEFAULT_TEST_FIELD, "b*a")); // reflexive? assertEquals(wq1, wq2); assertEquals(wq2, wq1); // transitive? assertEquals(wq2, wq3); assertEquals(wq1, wq3); assertFalse(wq1.equals(null)); final NodeFuzzyQuery fq = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "b*a")); assertFalse(wq1.equals(fq)); assertFalse(fq.equals(wq1)); }
LuceneProxyNodeQuery query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 0)); ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(3, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 1)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(3, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 2)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(3, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 3)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(3, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 4)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(2, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 5)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "aaaaa"), NodeFuzzyQuery.defaultMaxEdits, 6)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "bbbbb"), NodeFuzzyQuery.defaultMaxEdits, 0)); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals("3 documents should match", 3, hits.length); query = dq(new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "bbbbb"), NodeFuzzyQuery.defaultMaxEdits, 0, 2, false)); hits = searcher.search(query, null, 1000).scoreDocs;
@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"); }
public void testNoSuchMultiTermsInNear() throws Exception { NodeFuzzyQuery fuzzyNoSuch = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "noSuch"), 1, 0, 1, false); SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch);
public void testNoSuchMultiTermsInNotNear() throws Exception { NodeFuzzyQuery fuzzyNoSuch = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "noSuch"), 1, 0, 1, false); SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch);
public void testNoSuchMultiTermsInOr() throws Exception { NodeFuzzyQuery fuzzyNoSuch = new NodeFuzzyQuery(new Term(DEFAULT_TEST_FIELD, "noSuch"), 1, 0, 1, false); SpanQuery spanNoSuch = new MultiTermSpanQuery<NodeFuzzyQuery>(fuzzyNoSuch);