blob: cc32ad6b9b1550ea043e5671d8965e068b6e9046 [file] [log] [blame]
margaretha9fbffa92015-05-12 18:25:23 +02001package 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;
margaretha9fbffa92015-05-12 18:25:23 +02007import org.apache.lucene.index.Term;
8import org.apache.lucene.index.TermContext;
9import org.apache.lucene.search.spans.SpanQuery;
10import org.apache.lucene.search.spans.Spans;
11import org.apache.lucene.util.Bits;
12
13import de.ids_mannheim.korap.query.spans.ClassFilteredSpans;
14
Eliza Margaretha95917962016-11-16 16:07:08 +010015/** Filters query results by means of class operations.
16 *
17 * @author margaretha
18 *
19 */
margaretha9fbffa92015-05-12 18:25:23 +020020public class SpanClassFilterQuery extends SimpleSpanQuery {
21
22 public enum ClassOperation {
23 DISJOINT, INTERSECT, INCLUDE, EQUAL, DIFFER
24 }
25
26 private ClassOperation operation;
27 private byte classNum1, classNum2;
28
Akronbb5d1732015-06-22 01:22:40 +020029
margaretha9fbffa92015-05-12 18:25:23 +020030 public SpanClassFilterQuery (SpanQuery sq, ClassOperation type,
Akronbb5d1732015-06-22 01:22:40 +020031 int classNum1, int classNum2,
32 boolean collectPayloads) {
margaretha9fbffa92015-05-12 18:25:23 +020033 super(sq, collectPayloads);
34 this.operation = type;
35 this.classNum1 = (byte) classNum1;
36 this.classNum2 = (byte) classNum2;
37 }
38
Akronbb5d1732015-06-22 01:22:40 +020039
margaretha9fbffa92015-05-12 18:25:23 +020040 @Override
Akronbb5d1732015-06-22 01:22:40 +020041 public SimpleSpanQuery clone () {
margaretha9fbffa92015-05-12 18:25:23 +020042 return new SpanClassFilterQuery((SpanQuery) firstClause.clone(),
Akronbb5d1732015-06-22 01:22:40 +020043 operation, classNum1, classNum2, collectPayloads);
margaretha9fbffa92015-05-12 18:25:23 +020044 }
45
Akronbb5d1732015-06-22 01:22:40 +020046
margaretha9fbffa92015-05-12 18:25:23 +020047 @Override
Akron700c1eb2015-09-25 16:57:30 +020048 public Spans getSpans (LeafReaderContext context, Bits acceptDocs,
margaretha9fbffa92015-05-12 18:25:23 +020049 Map<Term, TermContext> termContexts) throws IOException {
Akronbb5d1732015-06-22 01:22:40 +020050 return new ClassFilteredSpans(this, context, acceptDocs, termContexts);
margaretha9fbffa92015-05-12 18:25:23 +020051 }
52
Akronbb5d1732015-06-22 01:22:40 +020053
margaretha9fbffa92015-05-12 18:25:23 +020054 @Override
Akronbb5d1732015-06-22 01:22:40 +020055 public String toString (String field) {
margaretha9fbffa92015-05-12 18:25:23 +020056 StringBuilder sb = new StringBuilder();
57 sb.append("spanClassFilter(");
58 sb.append(firstClause.toString());
59 sb.append(",");
60 sb.append(operation);
61 sb.append(",");
62 sb.append(classNum1);
63 sb.append(",");
64 sb.append(classNum2);
65 sb.append(")");
66 return sb.toString();
67 }
68
Akronbb5d1732015-06-22 01:22:40 +020069
70 public ClassOperation getOperation () {
margaretha9fbffa92015-05-12 18:25:23 +020071 return operation;
72 }
73
Akronbb5d1732015-06-22 01:22:40 +020074
75 public void setOperation (ClassOperation operation) {
margaretha9fbffa92015-05-12 18:25:23 +020076 this.operation = operation;
77 }
78
Akronbb5d1732015-06-22 01:22:40 +020079
80 public byte getClassNum1 () {
margaretha9fbffa92015-05-12 18:25:23 +020081 return classNum1;
82 }
83
Akronbb5d1732015-06-22 01:22:40 +020084
85 public void setClassNum1 (byte classNum1) {
margaretha9fbffa92015-05-12 18:25:23 +020086 this.classNum1 = classNum1;
87 }
88
Akronbb5d1732015-06-22 01:22:40 +020089
90 public byte getClassNum2 () {
margaretha9fbffa92015-05-12 18:25:23 +020091 return classNum2;
92 }
93
Akronbb5d1732015-06-22 01:22:40 +020094
95 public void setClassNum2 (byte classNum2) {
margaretha9fbffa92015-05-12 18:25:23 +020096 this.classNum2 = classNum2;
97 }
98
99}