| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query; |
| 2 | |
| 3 | import java.io.IOException; |
| 4 | import java.util.Map; |
| 5 | |
| Akron | 700c1eb | 2015-09-25 16:57:30 +0200 | [diff] [blame] | 6 | import org.apache.lucene.index.LeafReaderContext; |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 7 | import org.apache.lucene.index.Term; |
| 8 | import org.apache.lucene.index.TermContext; |
| 9 | import org.apache.lucene.search.spans.SpanQuery; |
| 10 | import org.apache.lucene.search.spans.Spans; |
| 11 | import org.apache.lucene.util.Bits; |
| 12 | |
| 13 | import de.ids_mannheim.korap.query.spans.ClassFilteredSpans; |
| 14 | |
| Eliza Margaretha | 9591796 | 2016-11-16 16:07:08 +0100 | [diff] [blame] | 15 | /** Filters query results by means of class operations. |
| 16 | * |
| 17 | * @author margaretha |
| 18 | * |
| 19 | */ |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 20 | public 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 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 29 | |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 30 | public SpanClassFilterQuery (SpanQuery sq, ClassOperation type, |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 31 | int classNum1, int classNum2, |
| 32 | boolean collectPayloads) { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 33 | super(sq, collectPayloads); |
| 34 | this.operation = type; |
| 35 | this.classNum1 = (byte) classNum1; |
| 36 | this.classNum2 = (byte) classNum2; |
| 37 | } |
| 38 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 39 | |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 40 | @Override |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 41 | public SimpleSpanQuery clone () { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 42 | return new SpanClassFilterQuery((SpanQuery) firstClause.clone(), |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 43 | operation, classNum1, classNum2, collectPayloads); |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 44 | } |
| 45 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 46 | |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 47 | @Override |
| Akron | 700c1eb | 2015-09-25 16:57:30 +0200 | [diff] [blame] | 48 | public Spans getSpans (LeafReaderContext context, Bits acceptDocs, |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 49 | Map<Term, TermContext> termContexts) throws IOException { |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 50 | return new ClassFilteredSpans(this, context, acceptDocs, termContexts); |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 51 | } |
| 52 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 53 | |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 54 | @Override |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 55 | public String toString (String field) { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 56 | 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 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 69 | |
| 70 | public ClassOperation getOperation () { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 71 | return operation; |
| 72 | } |
| 73 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 74 | |
| 75 | public void setOperation (ClassOperation operation) { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 76 | this.operation = operation; |
| 77 | } |
| 78 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 79 | |
| 80 | public byte getClassNum1 () { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 81 | return classNum1; |
| 82 | } |
| 83 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 84 | |
| 85 | public void setClassNum1 (byte classNum1) { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 86 | this.classNum1 = classNum1; |
| 87 | } |
| 88 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 89 | |
| 90 | public byte getClassNum2 () { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 91 | return classNum2; |
| 92 | } |
| 93 | |
| Akron | bb5d173 | 2015-06-22 01:22:40 +0200 | [diff] [blame] | 94 | |
| 95 | public void setClassNum2 (byte classNum2) { |
| margaretha | 9fbffa9 | 2015-05-12 18:25:23 +0200 | [diff] [blame] | 96 | this.classNum2 = classNum2; |
| 97 | } |
| 98 | |
| 99 | } |