blob: 87de3705055a613136748c1659167323aeb1fac9 [file] [log] [blame]
Eliza Margarethad12cabb2014-10-27 17:45:34 +00001package de.ids_mannheim.korap.query;
2
3import java.io.IOException;
4import java.util.Map;
5
6import org.apache.lucene.index.AtomicReaderContext;
7import org.apache.lucene.index.Term;
8import org.apache.lucene.index.TermContext;
9import org.apache.lucene.search.spans.SpanTermQuery;
10import org.apache.lucene.search.spans.Spans;
11import org.apache.lucene.util.Bits;
12
13import de.ids_mannheim.korap.query.spans.TermSpansWithId;
14
Eliza Margaretha19cecc62014-12-19 17:10:06 +000015/**
Nils Diewaldbb33da22015-03-04 16:24:25 +000016 * SpanTermWithIdQuery wraps a SpanTermQuery retrieving TermSpans and
17 * add a
18 * spanid to the TermSpans. It is used in other spanqueries requiring
19 * spans with
20 * id as their child spans, for example in span relation with variable
21 * query ( {@link SpanRelationPartQuery}).
Eliza Margaretha19cecc62014-12-19 17:10:06 +000022 *
Eliza Margaretha7612bde2015-01-14 10:28:42 +000023 * <pre>
Nils Diewaldbb33da22015-03-04 16:24:25 +000024 * SpanTermWithIdQuery sq = new SpanTermWithIdQuery(new
25 * Term("base","tt:p/NN"),true)
Eliza Margaretha7612bde2015-01-14 10:28:42 +000026 * </pre>
27 *
Nils Diewaldbb33da22015-03-04 16:24:25 +000028 * In this example, the SpanTermWithIdQuery retrieves
29 * {@link SpansWithId} for
Eliza Margaretha7612bde2015-01-14 10:28:42 +000030 * the Term "tt:p/NN".
31 *
Eliza Margaretha19cecc62014-12-19 17:10:06 +000032 * @author margaretha
Eliza Margarethad12cabb2014-10-27 17:45:34 +000033 * */
margaretha50c76332015-03-19 10:10:39 +010034public class SpanTermWithIdQuery extends SimpleSpanQuery {
Eliza Margarethad12cabb2014-10-27 17:45:34 +000035
Eliza Margaretha19cecc62014-12-19 17:10:06 +000036 /**
37 * Constructs a SpanTermWithIdQuery for the given term.
38 *
Nils Diewaldbb33da22015-03-04 16:24:25 +000039 * @param term
40 * a {@link Term}
41 * @param collectPayloads
42 * a boolean flag representing the value
43 * <code>true</code> if payloads are to be collected,
44 * otherwise
45 * <code>false</code>.
Eliza Margaretha19cecc62014-12-19 17:10:06 +000046 */
Nils Diewaldbb33da22015-03-04 16:24:25 +000047 public SpanTermWithIdQuery (Term term, boolean collectPayloads) {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000048 super(new SpanTermQuery(term), collectPayloads);
49 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000050
Nils Diewaldbb33da22015-03-04 16:24:25 +000051
Eliza Margaretha19cecc62014-12-19 17:10:06 +000052 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +000053 public SimpleSpanQuery clone () {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000054 SpanTermQuery sq = (SpanTermQuery) this.firstClause;
55 return new SpanTermWithIdQuery(sq.getTerm(), this.collectPayloads);
56 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000057
Nils Diewaldbb33da22015-03-04 16:24:25 +000058
Eliza Margaretha19cecc62014-12-19 17:10:06 +000059 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +000060 public Spans getSpans (AtomicReaderContext context, Bits acceptDocs,
Eliza Margaretha19cecc62014-12-19 17:10:06 +000061 Map<Term, TermContext> termContexts) throws IOException {
62 return new TermSpansWithId(this, context, acceptDocs, termContexts);
63 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000064
Nils Diewaldbb33da22015-03-04 16:24:25 +000065
Eliza Margaretha19cecc62014-12-19 17:10:06 +000066 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +000067 public String toString (String field) {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000068 StringBuilder sb = new StringBuilder();
69 sb.append("spanTermWithId(");
70 sb.append(firstClause.toString(field));
71 sb.append(")");
72 return sb.toString();
73 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000074
75}