List of usage examples for org.apache.lucene.search.spans SpanOrQuery SpanOrQuery
SpanOrQuery
From source file:com.o19s.solr.swan.nodes.SwanOrOperationNode.java
License:Apache License
@Override public SpanQuery getSpanQuery(String field) { SpanOrQuery query = new SpanOrQuery(); for (SwanNode n : _nodes) { query.addClause(n.getSpanQuery(field)); }/*from w w w .ja v a 2 s . c o m*/ return query; }
From source file:com.o19s.solr.swan.nodes.SwanXOrOperationNode.java
License:Apache License
@Override public SpanQuery getSpanQuery(String field) { SpanOrQuery query = new SpanOrQuery(); List<SwanNode> inc;/* w w w.java 2s .c o m*/ for (int x = 0; x < _nodes.size(); x++) { inc = new ArrayList<SwanNode>(); inc.addAll(_nodes); inc.remove(x); SpanOrQuery or = new SpanOrQuery(); for (SwanNode n : inc) { or.addClause(n.getSpanQuery(field)); } if (or.getClauses().length > 0) { SpanNotQuery not = new SpanNotQuery(_nodes.get(x).getSpanQuery(field), or); query.addClause(not); } } return query; }
From source file:org.tallison.lucene.queryparser.spans.SpanQueryParserBase.java
License:Apache License
/** * Converts {@link #newFieldQuery(String, String, boolean, int)} to something * as close as possible to a SpanQuery./*www . j a va2s. c o m*/ * <p> * Can return null, e.g. if asked to create newFieldSpanQuery from a stop word. * @param fieldName field for query * @param termText text for term * @param quoted whether or not this is quoted * @return a SpanQuery that is as close as possible to the Query created by * {@link #newFieldQuery(String, String, boolean, int)} * @throws ParseException if encountered during parse */ protected SpanQuery newFieldSpanQuery(String fieldName, String termText, boolean quoted) throws ParseException { Analyzer analyzer = getAnalyzer(fieldName); if (analyzer == null) { throw new ParseException("Need to have non-null analyzer for term queries within a 'near' clause."); } Query q = newFieldQuery(fieldName, termText, quoted, 0); if (q == null) { return null; } //now convert to a SpanQuery if (q instanceof TermQuery) { SpanTermQuery stq = new SpanTermQuery(((TermQuery) q).getTerm()); return stq; } else if (q instanceof BooleanQuery) { //TODO: there are dragons here. convertBooleanOfBooleanOrTermsToSpan //ignores the operators inside of the BooleanQuery //and just treats this as big "OR" for now return convertBooleanOfBooleanOrTermsToSpan((BooleanQuery) q); } else if (q instanceof PhraseQuery) { PhraseQuery pq = (PhraseQuery) q; Term[] terms = pq.getTerms(); int[] positions = pq.getPositions(); List<SpanQuery> spanTerms = new LinkedList<>(); for (Term t : terms) { spanTerms.add(new SpanTermQuery(t)); } int slop = positions[positions.length - 1] - (positions.length - 1); return buildSpanNearQuery(spanTerms, slop, true); } else if (q instanceof MultiPhraseQuery) { MultiPhraseQuery mpq = (MultiPhraseQuery) q; int[] positions = mpq.getPositions(); Term[][] terms = mpq.getTermArrays(); List<SpanQuery> spanTerms = new LinkedList<>(); for (Term[] tArr : terms) { List<SpanQuery> spans = new LinkedList<>(); for (Term t : tArr) { spans.add(new SpanTermQuery(t)); } SpanQuery spanOr = buildSpanOrQuery(spans); spanTerms.add(spanOr); } int slop = positions[positions.length - 1] - positions.length; return buildSpanNearQuery(spanTerms, slop, true); } else if (q instanceof SynonymQuery) { SynonymQuery synonymQuery = (SynonymQuery) q; if (synonymQuery.getTerms().size() == 0) { return new SpanOrQuery(); } else if (synonymQuery.getTerms().size() == 1) { return new SpanTermQuery(synonymQuery.getTerms().get(0)); } SpanQuery[] clauses = new SpanQuery[((SynonymQuery) q).getTerms().size()]; int i = 0; for (Term t : ((SynonymQuery) q).getTerms()) { clauses[i++] = new SpanTermQuery(t); } return new SpanOrQuery(clauses); } throw new IllegalArgumentException("Can't convert class >" + q.getClass() + "< to a SpanQuery"); }