blob: 150f060ebe6592667b609c456c6082bfd212effb [file] [log] [blame]
Eliza Margarethafb25cef2014-06-06 14:19:07 +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;
Eliza Margarethafb25cef2014-06-06 14:19:07 +00009import org.apache.lucene.search.spans.SpanTermQuery;
10import org.apache.lucene.search.spans.Spans;
11import org.apache.lucene.util.Bits;
12import org.apache.lucene.util.ToStringUtils;
13
14import de.ids_mannheim.korap.query.spans.AttributeSpans;
15
Eliza Margarethac0a66f12014-07-24 11:03:19 +000016/** Span enumerations of attributes (i.e. spans with prefix @, for example
17 * @:class=header) commonly used to search elements with some specific
18 * attribute(s). Negation allows for searching element <em>without</em> some
19 * attribute(s).
20 *
21 * @author margaretha
22 * */
Eliza Margarethafb25cef2014-06-06 14:19:07 +000023public class SpanAttributeQuery extends SimpleSpanQuery{
Eliza Margaretha997ccde2014-07-04 09:20:35 +000024
25 boolean isNegation;
26
Eliza Margarethafb25cef2014-06-06 14:19:07 +000027 public SpanAttributeQuery(SpanTermQuery firstClause, boolean collectPayloads) {
28 super(firstClause, collectPayloads);
29 }
Eliza Margaretha997ccde2014-07-04 09:20:35 +000030
Eliza Margarethac0a66f12014-07-24 11:03:19 +000031 public SpanAttributeQuery(SpanTermQuery firstClause, boolean isNegation,
32 boolean collectPayloads) {
Eliza Margaretha997ccde2014-07-04 09:20:35 +000033 super(firstClause, collectPayloads);
34 this.isNegation = isNegation;
35 }
Eliza Margarethafb25cef2014-06-06 14:19:07 +000036
37 @Override
38 public SimpleSpanQuery clone() {
39 SpanAttributeQuery sq = new SpanAttributeQuery(
40 (SpanTermQuery) this.firstClause.clone(),
Eliza Margarethac0a66f12014-07-24 11:03:19 +000041 this.isNegation,
Eliza Margarethafb25cef2014-06-06 14:19:07 +000042 this.collectPayloads);
43 sq.setBoost(getBoost());
44 return sq;
45 }
46
47 @Override
48 public Spans getSpans(AtomicReaderContext context, Bits acceptDocs,
49 Map<Term, TermContext> termContexts) throws IOException {
50 return new AttributeSpans(this, context, acceptDocs, termContexts);
51 }
52
53 @Override
54 public String toString(String field) {
55 StringBuilder sb = new StringBuilder();
56 sb.append("spanAttribute(");
Eliza Margaretha7788a982014-08-29 16:10:52 +000057 sb.append(firstClause.toString(field));
58 if (isNegation)
59 sb.append( ", not");
60 sb.append(")");
Eliza Margarethafb25cef2014-06-06 14:19:07 +000061 sb.append(ToStringUtils.boost(getBoost()));
62 return sb.toString();
63 }
64
Eliza Margaretha997ccde2014-07-04 09:20:35 +000065 public boolean isNegation() {
66 return isNegation;
67 }
68
69 public void setNegation(boolean isNegation) {
70 this.isNegation = isNegation;
71 }
72
Eliza Margarethafb25cef2014-06-06 14:19:07 +000073}