List of usage examples for org.apache.lucene.search.spans SpanNearQuery getSlop
public int getSlop()
From source file:org.alfresco.solr.query.Solr4QueryParserTest.java
License:Open Source License
@Test public void testFlatQueryShouldBeGeneratedFromSequentiallyShiftedTokens() throws Exception { // prepare test data LinkedList<PackedTokenAttributeImpl> tokenSequenceWithRepeatedGroup = new LinkedList<PackedTokenAttributeImpl>(); tokenSequenceWithRepeatedGroup.add(getTokenAttribute(TEST_QUERY.substring(0, 4), 0, 4)); tokenSequenceWithRepeatedGroup.add(getTokenAttribute(TEST_QUERY.substring(5, 6), 5, 6)); tokenSequenceWithRepeatedGroup.add(getTokenAttribute(TEST_QUERY.substring(6, 10), 6, 10)); tokenSequenceWithRepeatedGroup.add(getTokenAttribute(TEST_QUERY.substring(10, 11), 10, 11)); assertTrue("All tokens in test data must be sequentially shifted", parser.isAllTokensSequentiallyShifted(tokenSequenceWithRepeatedGroup)); assertTrue(parser.getEnablePositionIncrements()); LinkedList<LinkedList<PackedTokenAttributeImpl>> fixedTokenSequences = new LinkedList<LinkedList<PackedTokenAttributeImpl>>(); fixedTokenSequences.add(tokenSequenceWithRepeatedGroup); // call method to test SpanQuery q = parser.generateSpanOrQuery(TEST_FIELD, fixedTokenSequences); // check results assertNotNull(q);// w w w.java2 s . com assertTrue(q instanceof SpanNearQuery); SpanNearQuery spanNearQuery = (SpanNearQuery) q; assertEquals("Slop between term must be 0", 0, spanNearQuery.getSlop()); assertTrue("Terms must be in order", spanNearQuery.isInOrder()); SpanQuery[] termClauses = spanNearQuery.getClauses(); assertEquals("Flat query must be generated (Query: " + q + ")", tokenSequenceWithRepeatedGroup.size(), termClauses.length); for (int i = 0; i < termClauses.length; i++) { assertTrue(termClauses[i] instanceof SpanTermQuery); assertEquals("All tokens must become spanQuery terms", tokenSequenceWithRepeatedGroup.get(i).toString(), ((SpanTermQuery) termClauses[i]).getTerm().text()); } }
From source file:org.apache.solr.search.TestSolrCoreParser.java
License:Apache License
private static void checkApacheLuceneSolr(Query query, String fieldName) { assertTrue(query instanceof SpanNearQuery); final SpanNearQuery snq = (SpanNearQuery) query; assertEquals(fieldName, snq.getField()); assertEquals(42, snq.getSlop()); assertFalse(snq.isInOrder());//w w w.j a v a2s . c o m assertEquals(3, snq.getClauses().length); assertTrue(snq.getClauses()[0] instanceof SpanTermQuery); assertTrue(snq.getClauses()[1] instanceof SpanTermQuery); assertTrue(snq.getClauses()[2] instanceof SpanTermQuery); }
From source file:org.elasticsearch.index.query.SpanGapQueryBuilderTests.java
License:Apache License
@Override protected void doAssertLuceneQuery(SpanNearQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException { assertThat(query, either(instanceOf(SpanNearQuery.class)).or(instanceOf(SpanTermQuery.class)) .or(instanceOf(SpanBoostQuery.class)).or(instanceOf(MatchAllQueryBuilder.class))); if (query instanceof SpanNearQuery) { SpanNearQuery spanNearQuery = (SpanNearQuery) query; assertThat(spanNearQuery.getSlop(), equalTo(queryBuilder.slop())); assertThat(spanNearQuery.isInOrder(), equalTo(queryBuilder.inOrder())); assertThat(spanNearQuery.getClauses().length, equalTo(queryBuilder.clauses().size())); Iterator<SpanQueryBuilder> spanQueryBuilderIterator = queryBuilder.clauses().iterator(); for (SpanQuery spanQuery : spanNearQuery.getClauses()) { SpanQueryBuilder spanQB = spanQueryBuilderIterator.next(); if (spanQB instanceof SpanGapQueryBuilder) continue; assertThat(spanQuery, equalTo(spanQB.toQuery(context.getQueryShardContext()))); }//w w w . java 2s . com } else if (query instanceof SpanTermQuery || query instanceof SpanBoostQuery) { assertThat(queryBuilder.clauses().size(), equalTo(1)); assertThat(query, equalTo(queryBuilder.clauses().get(0).toQuery(context.getQueryShardContext()))); } }
From source file:org.elasticsearch.index.query.SpanNearQueryBuilderTests.java
License:Apache License
@Override protected void doAssertLuceneQuery(SpanNearQueryBuilder queryBuilder, Query query, QueryShardContext context) throws IOException { assertThat(query, instanceOf(SpanNearQuery.class)); SpanNearQuery spanNearQuery = (SpanNearQuery) query; assertThat(spanNearQuery.getSlop(), equalTo(queryBuilder.slop())); assertThat(spanNearQuery.isInOrder(), equalTo(queryBuilder.inOrder())); assertThat(spanNearQuery.getClauses().length, equalTo(queryBuilder.clauses().size())); Iterator<SpanQueryBuilder> spanQueryBuilderIterator = queryBuilder.clauses().iterator(); for (SpanQuery spanQuery : spanNearQuery.getClauses()) { assertThat(spanQuery, equalTo(spanQueryBuilderIterator.next().toQuery(context))); }//from w w w . ja v a 2 s .c om }
From source file:org.eu.bitzone.Leia.java
License:Apache License
private void _explainStructure(final Object parent, final Query q) { String clazz = q.getClass().getName(); if (clazz.startsWith("org.apache.lucene.")) { clazz = "lucene." + q.getClass().getSimpleName(); } else if (clazz.startsWith("org.apache.solr.")) { clazz = "solr." + q.getClass().getSimpleName(); }/*from w ww .ja v a 2 s. co m*/ final float boost = q.getBoost(); final Object n = create("node"); add(parent, n); String msg = clazz; if (boost != 1.0f) { msg += ": boost=" + df.format(boost); } setFont(n, getFont().deriveFont(Font.BOLD)); setString(n, "text", msg); if (clazz.equals("lucene.TermQuery")) { final Object n1 = create("node"); final Term t = ((TermQuery) q).getTerm(); setString(n1, "text", "Term: field='" + t.field() + "' text='" + t.text() + "'"); add(n, n1); } else if (clazz.equals("lucene.BooleanQuery")) { final BooleanQuery bq = (BooleanQuery) q; final BooleanClause[] clauses = bq.getClauses(); final int max = BooleanQuery.getMaxClauseCount(); Object n1 = create("node"); String descr = "clauses=" + clauses.length + ", maxClauses=" + max; if (bq.isCoordDisabled()) { descr += ", coord=false"; } if (bq.getMinimumNumberShouldMatch() > 0) { descr += ", minShouldMatch=" + bq.getMinimumNumberShouldMatch(); } setString(n1, "text", descr); add(n, n1); for (int i = 0; i < clauses.length; i++) { n1 = create("node"); String occur; final Occur occ = clauses[i].getOccur(); if (occ.equals(Occur.MUST)) { occur = "MUST"; } else if (occ.equals(Occur.MUST_NOT)) { occur = "MUST_NOT"; } else if (occ.equals(Occur.SHOULD)) { occur = "SHOULD"; } else { occur = occ.toString(); } setString(n1, "text", "Clause " + i + ": " + occur); add(n, n1); _explainStructure(n1, clauses[i].getQuery()); } } else if (clazz.equals("lucene.PrefixQuery")) { Object n1 = create("node"); final PrefixQuery pq = (PrefixQuery) q; final Term t = pq.getPrefix(); setString(n1, "text", "Prefix: field='" + t.field() + "' text='" + t.text() + "'"); add(n, n1); try { addTermsEnum(n, PrefixQuery.class, pq.getField(), pq); } catch (final Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (clazz.equals("lucene.PhraseQuery")) { final PhraseQuery pq = (PhraseQuery) q; setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop()); final int[] pos = pq.getPositions(); final Term[] terms = pq.getTerms(); Object n1 = create("node"); final StringBuffer sb = new StringBuffer("pos: ["); for (int i = 0; i < pos.length; i++) { if (i > 0) { sb.append(','); } sb.append("" + pos[i]); } sb.append("]"); setString(n1, "text", sb.toString()); add(n, n1); for (int i = 0; i < terms.length; i++) { n1 = create("node"); setString(n1, "text", "Term " + i + ": field='" + terms[i].field() + "' text='" + terms[i].text() + "'"); add(n, n1); } } else if (clazz.equals("lucene.MultiPhraseQuery")) { final MultiPhraseQuery pq = (MultiPhraseQuery) q; setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop()); final int[] pos = pq.getPositions(); Object n1 = create("node"); final StringBuffer sb = new StringBuffer("pos: ["); for (int i = 0; i < pos.length; i++) { if (i > 0) { sb.append(','); } sb.append("" + pos[i]); } sb.append("]"); setString(n1, "text", sb.toString()); add(n, n1); n1 = create("node"); System.err.println("MultiPhraseQuery is missing the public getTermArrays() :-("); setString(n1, "text", "toString: " + pq.toString()); add(n, n1); } else if (clazz.equals("lucene.FuzzyQuery")) { final FuzzyQuery fq = (FuzzyQuery) q; Object n1 = create("node"); setString(n1, "text", "field=" + fq.getField() + ", prefixLen=" + fq.getPrefixLength() + ", maxEdits=" + df.format(fq.getMaxEdits())); add(n, n1); try { addTermsEnum(n, FuzzyQuery.class, fq.getField(), fq); } catch (final Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (clazz.equals("lucene.WildcardQuery")) { final WildcardQuery wq = (WildcardQuery) q; final Term t = wq.getTerm(); setString(n, "text", getString(n, "text") + ", term=" + t); final Automaton a = WildcardQuery.toAutomaton(t); addAutomaton(n, a); } else if (clazz.equals("lucene.TermRangeQuery")) { final TermRangeQuery rq = (TermRangeQuery) q; setString(n, "text", getString(n, "text") + ", inclLower=" + rq.includesLower() + ", inclUpper=" + rq.includesUpper()); Object n1 = create("node"); setString(n1, "text", "lowerTerm=" + rq.getField() + ":" + rq.getLowerTerm() + "'"); add(n, n1); n1 = create("node"); setString(n1, "text", "upperTerm=" + rq.getField() + ":" + rq.getUpperTerm() + "'"); add(n, n1); try { addTermsEnum(n, TermRangeQuery.class, rq.getField(), rq); } catch (final Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof AutomatonQuery) { final AutomatonQuery aq = (AutomatonQuery) q; setString(n, "text", getString(n, "text") + ", " + aq.toString()); // get automaton try { final java.lang.reflect.Field aField = AutomatonQuery.class.getDeclaredField("automaton"); aField.setAccessible(true); final Automaton a = (Automaton) aField.get(aq); addAutomaton(n, a); } catch (final Exception e) { e.printStackTrace(); final Object n1 = create("node"); setString(n1, "text", "Automaton: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof MultiTermQuery) { final MultiTermQuery mq = (MultiTermQuery) q; final Set<Term> terms = new HashSet<Term>(); mq.extractTerms(terms); setString(n, "text", getString(n, "text") + ", terms: " + terms); try { addTermsEnum(n, TermRangeQuery.class, mq.getField(), mq); } catch (final Exception e) { e.printStackTrace(); final Object n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof ConstantScoreQuery) { final ConstantScoreQuery cq = (ConstantScoreQuery) q; setString(n, "text", getString(n, "text") + ", " + cq.toString()); final Object n1 = create("node"); add(n, n1); if (cq.getFilter() != null) { setString(n1, "text", "Filter: " + cq.getFilter().toString()); } else if (cq.getQuery() != null) { _explainStructure(n, cq.getQuery()); } } else if (q instanceof FilteredQuery) { final FilteredQuery fq = (FilteredQuery) q; final Object n1 = create("node"); setString(n1, "text", "Filter: " + fq.getFilter().toString()); add(n, n1); _explainStructure(n, fq.getQuery()); } else if (q instanceof SpanQuery) { final SpanQuery sq = (SpanQuery) q; final Class sqlass = sq.getClass(); setString(n, "text", getString(n, "text") + ", field=" + sq.getField()); if (sqlass == SpanOrQuery.class) { final SpanOrQuery soq = (SpanOrQuery) sq; setString(n, "text", getString(n, "text") + ", " + soq.getClauses().length + " clauses"); for (final SpanQuery sq1 : soq.getClauses()) { _explainStructure(n, sq1); } } else if (sqlass == SpanFirstQuery.class) { final SpanFirstQuery sfq = (SpanFirstQuery) sq; setString(n, "text", getString(n, "text") + ", end=" + sfq.getEnd() + ", match:"); _explainStructure(n, sfq.getMatch()); } else if (q instanceof SpanNearQuery) { // catch also known subclasses final SpanNearQuery snq = (SpanNearQuery) sq; setString(n, "text", getString(n, "text") + ", slop=" + snq.getSlop()); if (snq instanceof PayloadNearQuery) { try { final java.lang.reflect.Field function = PayloadNearQuery.class .getDeclaredField("function"); function.setAccessible(true); final Object func = function.get(snq); setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName()); } catch (final Exception e) { e.printStackTrace(); } } for (final SpanQuery sq1 : snq.getClauses()) { _explainStructure(n, sq1); } } else if (sqlass == SpanNotQuery.class) { final SpanNotQuery snq = (SpanNotQuery) sq; Object n1 = create("node"); add(n, n1); setString(n1, "text", "Include:"); _explainStructure(n1, snq.getInclude()); n1 = create("node"); add(n, n1); setString(n1, "text", "Exclude:"); _explainStructure(n1, snq.getExclude()); } else if (q instanceof SpanTermQuery) { final SpanTermQuery stq = (SpanTermQuery) sq; setString(n, "text", getString(n, "text") + ", term=" + stq.getTerm()); if (stq instanceof PayloadTermQuery) { try { final java.lang.reflect.Field function = PayloadTermQuery.class .getDeclaredField("function"); function.setAccessible(true); final Object func = function.get(stq); setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName()); } catch (final Exception e) { e.printStackTrace(); } } } else { final String defField = getDefaultField(find("srchOptTabs")); setString(n, "text", "class=" + q.getClass().getName() + ", " + getString(n, "text") + ", toString=" + q.toString(defField)); final HashSet<Term> terms = new HashSet<Term>(); sq.extractTerms(terms); Object n1 = null; if (terms != null) { n1 = create("node"); setString(n1, "text", "Matched terms (" + terms.size() + "):"); add(n, n1); final Iterator<Term> it = terms.iterator(); while (it.hasNext()) { final Object n2 = create("node"); final Term t = it.next(); setString(n2, "text", "field='" + t.field() + "' text='" + t.text() + "'"); add(n1, n2); } } else { n1 = create("node"); setString(n1, "text", "<no terms matched>"); add(n, n1); } } if (ir != null) { final Object n1 = null; /* * in Lucene 4.0 this requires traversal of sub- and leaf readers, which is cumbersome to do here. try { Spans * spans = sq.getSpans(ir); if (spans != null) { n1 = create("node"); int cnt = 0; while (spans.next()) { Object * n2 = create("node"); setString(n2, "text", "doc=" + spans.doc() + ", start=" + spans.start() + ", end=" + * spans.end()); add(n1, n2); cnt++; } if (cnt > 0) { add(n, n1); setString(n1, "text", "Spans (" + cnt + "):"); * setBoolean(n1, "expanded", false); } } } catch (Exception e) { e.printStackTrace(); n1 = create("node"); * setString(n1, "text", "Spans Exception: " + e.getMessage()); add(n, n1); } */ } } else { Object n1 = create("node"); final String defField = getDefaultField(find("srchOptTabs")); final Set<Term> terms = new HashSet<Term>(); q.extractTerms(terms); setString(n1, "text", q.getClass().getName() + ": " + q.toString(defField)); add(n, n1); if (!terms.isEmpty()) { n1 = create("node"); setString(n1, "text", "terms: " + terms); add(n, n1); } } }
From source file:org.getopt.luke.Luke.java
License:Apache License
private void _explainStructure(Object parent, Query q) { String clazz = q.getClass().getName(); if (clazz.startsWith("org.apache.lucene.")) { clazz = "lucene." + q.getClass().getSimpleName(); } else if (clazz.startsWith("org.apache.solr.")) { clazz = "solr." + q.getClass().getSimpleName(); }/* w w w . j a va 2 s .c o m*/ float boost = q.getBoost(); Object n = create("node"); add(parent, n); String msg = clazz; if (boost != 1.0f) { msg += ": boost=" + df.format(boost); } setFont(n, getFont().deriveFont(Font.BOLD)); setString(n, "text", msg); if (clazz.equals("lucene.TermQuery")) { Object n1 = create("node"); Term t = ((TermQuery) q).getTerm(); setString(n1, "text", "Term: field='" + t.field() + "' text='" + t.text() + "'"); add(n, n1); } else if (clazz.equals("lucene.BooleanQuery")) { BooleanQuery bq = (BooleanQuery) q; BooleanClause[] clauses = bq.getClauses(); int max = bq.getMaxClauseCount(); Object n1 = create("node"); String descr = "clauses=" + clauses.length + ", maxClauses=" + max; if (bq.isCoordDisabled()) { descr += ", coord=false"; } if (bq.getMinimumNumberShouldMatch() > 0) { descr += ", minShouldMatch=" + bq.getMinimumNumberShouldMatch(); } setString(n1, "text", descr); add(n, n1); for (int i = 0; i < clauses.length; i++) { n1 = create("node"); String occur; Occur occ = clauses[i].getOccur(); if (occ.equals(Occur.MUST)) { occur = "MUST"; } else if (occ.equals(Occur.MUST_NOT)) { occur = "MUST_NOT"; } else if (occ.equals(Occur.SHOULD)) { occur = "SHOULD"; } else { occur = occ.toString(); } setString(n1, "text", "Clause " + i + ": " + occur); add(n, n1); _explainStructure(n1, clauses[i].getQuery()); } } else if (clazz.equals("lucene.PrefixQuery")) { Object n1 = create("node"); PrefixQuery pq = (PrefixQuery) q; Term t = pq.getPrefix(); setString(n1, "text", "Prefix: field='" + t.field() + "' text='" + t.text() + "'"); add(n, n1); try { addTermsEnum(n, PrefixQuery.class, pq.getField(), pq); } catch (Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (clazz.equals("lucene.PhraseQuery")) { PhraseQuery pq = (PhraseQuery) q; setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop()); int[] pos = pq.getPositions(); Term[] terms = pq.getTerms(); Object n1 = create("node"); StringBuffer sb = new StringBuffer("pos: ["); for (int i = 0; i < pos.length; i++) { if (i > 0) sb.append(','); sb.append("" + pos[i]); } sb.append("]"); setString(n1, "text", sb.toString()); add(n, n1); for (int i = 0; i < terms.length; i++) { n1 = create("node"); setString(n1, "text", "Term " + i + ": field='" + terms[i].field() + "' text='" + terms[i].text() + "'"); add(n, n1); } } else if (clazz.equals("lucene.MultiPhraseQuery")) { MultiPhraseQuery pq = (MultiPhraseQuery) q; setString(n, "text", getString(n, "text") + ", slop=" + pq.getSlop()); int[] pos = pq.getPositions(); Object n1 = create("node"); StringBuffer sb = new StringBuffer("pos: ["); for (int i = 0; i < pos.length; i++) { if (i > 0) sb.append(','); sb.append("" + pos[i]); } sb.append("]"); setString(n1, "text", sb.toString()); add(n, n1); n1 = create("node"); System.err.println("MultiPhraseQuery is missing the public getTermArrays() :-("); setString(n1, "text", "toString: " + pq.toString()); add(n, n1); } else if (clazz.equals("lucene.FuzzyQuery")) { FuzzyQuery fq = (FuzzyQuery) q; Object n1 = create("node"); setString(n1, "text", "field=" + fq.getField() + ", prefixLen=" + fq.getPrefixLength() + ", maxEdits=" + df.format(fq.getMaxEdits())); add(n, n1); try { addTermsEnum(n, FuzzyQuery.class, fq.getField(), fq); } catch (Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (clazz.equals("lucene.WildcardQuery")) { WildcardQuery wq = (WildcardQuery) q; Term t = wq.getTerm(); setString(n, "text", getString(n, "text") + ", term=" + t); Automaton a = WildcardQuery.toAutomaton(t); addAutomaton(n, a); } else if (clazz.equals("lucene.TermRangeQuery")) { TermRangeQuery rq = (TermRangeQuery) q; setString(n, "text", getString(n, "text") + ", inclLower=" + rq.includesLower() + ", inclUpper=" + rq.includesUpper()); Object n1 = create("node"); setString(n1, "text", "lowerTerm=" + rq.getField() + ":" + rq.getLowerTerm() + "'"); add(n, n1); n1 = create("node"); setString(n1, "text", "upperTerm=" + rq.getField() + ":" + rq.getUpperTerm() + "'"); add(n, n1); try { addTermsEnum(n, TermRangeQuery.class, rq.getField(), rq); } catch (Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof AutomatonQuery) { AutomatonQuery aq = (AutomatonQuery) q; setString(n, "text", getString(n, "text") + ", " + aq.toString()); // get automaton try { java.lang.reflect.Field aField = AutomatonQuery.class.getDeclaredField("automaton"); aField.setAccessible(true); Automaton a = (Automaton) aField.get(aq); addAutomaton(n, a); } catch (Exception e) { e.printStackTrace(); Object n1 = create("node"); setString(n1, "text", "Automaton: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof MultiTermQuery) { MultiTermQuery mq = (MultiTermQuery) q; Set<Term> terms = new HashSet<Term>(); mq.extractTerms(terms); setString(n, "text", getString(n, "text") + ", terms: " + terms); try { addTermsEnum(n, TermRangeQuery.class, mq.getField(), mq); } catch (Exception e) { e.printStackTrace(); Object n1 = create("node"); setString(n1, "text", "TermEnum: Exception " + e.getMessage()); add(n, n1); } } else if (q instanceof ConstantScoreQuery) { ConstantScoreQuery cq = (ConstantScoreQuery) q; setString(n, "text", getString(n, "text") + ", " + cq.toString()); Object n1 = create("node"); add(n, n1); if (cq.getFilter() != null) { setString(n1, "text", "Filter: " + cq.getFilter().toString()); } else if (cq.getQuery() != null) { _explainStructure(n, cq.getQuery()); } } else if (q instanceof FilteredQuery) { FilteredQuery fq = (FilteredQuery) q; Object n1 = create("node"); setString(n1, "text", "Filter: " + fq.getFilter().toString()); add(n, n1); _explainStructure(n, fq.getQuery()); } else if (q instanceof SpanQuery) { SpanQuery sq = (SpanQuery) q; Class sqlass = sq.getClass(); setString(n, "text", getString(n, "text") + ", field=" + sq.getField()); if (sqlass == SpanOrQuery.class) { SpanOrQuery soq = (SpanOrQuery) sq; setString(n, "text", getString(n, "text") + ", " + soq.getClauses().length + " clauses"); for (SpanQuery sq1 : soq.getClauses()) { _explainStructure(n, sq1); } } else if (sqlass == SpanFirstQuery.class) { SpanFirstQuery sfq = (SpanFirstQuery) sq; setString(n, "text", getString(n, "text") + ", end=" + sfq.getEnd() + ", match:"); _explainStructure(n, sfq.getMatch()); } else if (q instanceof SpanNearQuery) { // catch also known subclasses SpanNearQuery snq = (SpanNearQuery) sq; setString(n, "text", getString(n, "text") + ", slop=" + snq.getSlop()); if (snq instanceof PayloadNearQuery) { try { java.lang.reflect.Field function = PayloadNearQuery.class.getDeclaredField("function"); function.setAccessible(true); Object func = function.get(snq); setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName()); } catch (Exception e) { e.printStackTrace(); } } for (SpanQuery sq1 : snq.getClauses()) { _explainStructure(n, sq1); } } else if (sqlass == SpanNotQuery.class) { SpanNotQuery snq = (SpanNotQuery) sq; Object n1 = create("node"); add(n, n1); setString(n1, "text", "Include:"); _explainStructure(n1, snq.getInclude()); n1 = create("node"); add(n, n1); setString(n1, "text", "Exclude:"); _explainStructure(n1, snq.getExclude()); } else if (q instanceof SpanTermQuery) { SpanTermQuery stq = (SpanTermQuery) sq; setString(n, "text", getString(n, "text") + ", term=" + stq.getTerm()); if (stq instanceof PayloadTermQuery) { try { java.lang.reflect.Field function = PayloadTermQuery.class.getDeclaredField("function"); function.setAccessible(true); Object func = function.get(stq); setString(n, "text", getString(n, "text") + ", func=" + func.getClass().getSimpleName()); } catch (Exception e) { e.printStackTrace(); } } } else { String defField = getDefaultField(find("srchOptTabs")); setString(n, "text", "class=" + q.getClass().getName() + ", " + getString(n, "text") + ", toString=" + q.toString(defField)); HashSet<Term> terms = new HashSet<Term>(); sq.extractTerms(terms); Object n1 = null; if (terms != null) { n1 = create("node"); setString(n1, "text", "Matched terms (" + terms.size() + "):"); add(n, n1); Iterator<Term> it = terms.iterator(); while (it.hasNext()) { Object n2 = create("node"); Term t = it.next(); setString(n2, "text", "field='" + t.field() + "' text='" + t.text() + "'"); add(n1, n2); } } else { n1 = create("node"); setString(n1, "text", "<no terms matched>"); add(n, n1); } } if (ir != null) { Object n1 = null; /* in Lucene 4.0 this requires traversal of sub- and leaf readers, * which is cumbersome to do here. try { Spans spans = sq.getSpans(ir); if (spans != null) { n1 = create("node"); int cnt = 0; while (spans.next()) { Object n2 = create("node"); setString(n2, "text", "doc=" + spans.doc() + ", start=" + spans.start() + ", end=" + spans.end()); add(n1, n2); cnt++; } if (cnt > 0) { add(n, n1); setString(n1, "text", "Spans (" + cnt + "):"); setBoolean(n1, "expanded", false); } } } catch (Exception e) { e.printStackTrace(); n1 = create("node"); setString(n1, "text", "Spans Exception: " + e.getMessage()); add(n, n1); } */ } } else { Object n1 = create("node"); String defField = getDefaultField(find("srchOptTabs")); Set<Term> terms = new HashSet<Term>(); q.extractTerms(terms); setString(n1, "text", q.getClass().getName() + ": " + q.toString(defField)); add(n, n1); if (!terms.isEmpty()) { n1 = create("node"); setString(n1, "text", "terms: " + terms); add(n, n1); } } }
From source file:org.tallison.lucene.queryparser.spans.TestAdvancedAnalyzers.java
License:Apache License
@Test public void testNonWhiteSpace() throws Exception { SpanQueryParser p = new SpanQueryParser(FIELD1, baseAnalyzer, baseAnalyzer); String s = "[zqx_qrs^3.0]~3^2"; Query q = p.parse(s);/*from w ww .j av a 2 s . c o m*/ assertTrue(q instanceof SpanBoostQuery); assertTrue(((SpanBoostQuery) q).getQuery() instanceof SpanNearQuery); SpanNearQuery near = (SpanNearQuery) ((SpanBoostQuery) q).getQuery(); SpanQuery[] clauses = near.getClauses(); assertEquals(2, clauses.length); assertEquals(3, near.getSlop()); assertTrue(clauses[0] instanceof SpanTermQuery); assertTrue(clauses[1] instanceof SpanTermQuery); assertEquals("zqx", ((SpanTermQuery) clauses[0]).getTerm().text()); assertEquals("qrs", ((SpanTermQuery) clauses[1]).getTerm().text()); //take the boost from the phrase, ignore boost on term //not necessarily right choice, but this is how it works now assertEquals(2.0f, ((SpanBoostQuery) q).getBoost(), 0.00001f); s = "[zqx2_qrs3 lmnop]~3"; p.setAutoGeneratePhraseQueries(true); q = p.parse(s); assertTrue(q instanceof SpanQuery); assertTrue(q instanceof SpanNearQuery); near = (SpanNearQuery) q; clauses = near.getClauses(); assertEquals(2, clauses.length); assertEquals(3, near.getSlop()); assertTrue(clauses[0] instanceof SpanNearQuery); assertTrue(clauses[1] instanceof SpanTermQuery); SpanNearQuery child = (SpanNearQuery) clauses[0]; SpanQuery[] childClauses = child.getClauses(); assertEquals(2, childClauses.length); assertEquals("zqx", ((SpanTermQuery) childClauses[0]).getTerm().text()); assertEquals("qrs", ((SpanTermQuery) childClauses[1]).getTerm().text()); assertTrue(child.isInOrder()); assertEquals(child.getSlop(), 0); }
From source file:uk.co.flax.luwak.util.XSpanNearQuery.java
License:Apache License
public XSpanNearQuery(SpanNearQuery source) { this(source.getClauses(), source.getSlop(), source.isInOrder()); }