blob: 33cfdfbcc4f39bfe5e9908434a1faad770d83f78 [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
Akron700c1eb2015-09-25 16:57:30 +02006import org.apache.lucene.index.LeafReaderContext;
Eliza Margarethad12cabb2014-10-27 17:45:34 +00007import 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
Eliza Margarethadc98dc12016-11-16 14:33:42 +010017 * add a spanid to the TermSpans. It is used in other spanqueries
18 * requiring spans with id as their child spans, for example in span
19 * relation with variable query ( {@link SpanRelationPartQuery}).
Eliza Margaretha19cecc62014-12-19 17:10:06 +000020 *
Eliza Margaretha7612bde2015-01-14 10:28:42 +000021 * <pre>
Nils Diewaldbb33da22015-03-04 16:24:25 +000022 * SpanTermWithIdQuery sq = new SpanTermWithIdQuery(new
23 * Term("base","tt:p/NN"),true)
Eliza Margaretha7612bde2015-01-14 10:28:42 +000024 * </pre>
25 *
Nils Diewaldbb33da22015-03-04 16:24:25 +000026 * In this example, the SpanTermWithIdQuery retrieves
27 * {@link SpansWithId} for
Eliza Margaretha7612bde2015-01-14 10:28:42 +000028 * the Term "tt:p/NN".
29 *
Eliza Margaretha19cecc62014-12-19 17:10:06 +000030 * @author margaretha
Eliza Margaretha6f989202016-10-14 21:48:29 +020031 */
margaretha50c76332015-03-19 10:10:39 +010032public class SpanTermWithIdQuery extends SimpleSpanQuery {
Eliza Margarethad12cabb2014-10-27 17:45:34 +000033
Eliza Margaretha19cecc62014-12-19 17:10:06 +000034 /**
35 * Constructs a SpanTermWithIdQuery for the given term.
36 *
Nils Diewaldbb33da22015-03-04 16:24:25 +000037 * @param term
38 * a {@link Term}
39 * @param collectPayloads
40 * a boolean flag representing the value
41 * <code>true</code> if payloads are to be collected,
42 * otherwise
43 * <code>false</code>.
Eliza Margaretha19cecc62014-12-19 17:10:06 +000044 */
Nils Diewaldbb33da22015-03-04 16:24:25 +000045 public SpanTermWithIdQuery (Term term, boolean collectPayloads) {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000046 super(new SpanTermQuery(term), collectPayloads);
47 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000048
Nils Diewaldbb33da22015-03-04 16:24:25 +000049
Eliza Margaretha19cecc62014-12-19 17:10:06 +000050 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +000051 public SimpleSpanQuery clone () {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000052 SpanTermQuery sq = (SpanTermQuery) this.firstClause;
53 return new SpanTermWithIdQuery(sq.getTerm(), this.collectPayloads);
54 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000055
Nils Diewaldbb33da22015-03-04 16:24:25 +000056
Eliza Margaretha19cecc62014-12-19 17:10:06 +000057 @Override
Akron700c1eb2015-09-25 16:57:30 +020058 public Spans getSpans (LeafReaderContext context, Bits acceptDocs,
Eliza Margaretha19cecc62014-12-19 17:10:06 +000059 Map<Term, TermContext> termContexts) throws IOException {
60 return new TermSpansWithId(this, context, acceptDocs, termContexts);
61 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000062
Nils Diewaldbb33da22015-03-04 16:24:25 +000063
Eliza Margaretha19cecc62014-12-19 17:10:06 +000064 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +000065 public String toString (String field) {
Eliza Margaretha19cecc62014-12-19 17:10:06 +000066 StringBuilder sb = new StringBuilder();
67 sb.append("spanTermWithId(");
68 sb.append(firstClause.toString(field));
69 sb.append(")");
70 return sb.toString();
71 }
Eliza Margarethad12cabb2014-10-27 17:45:34 +000072
73}