| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query; |
| 2 | |
| 3 | import java.io.IOException; |
| 4 | import java.util.Map; |
| 5 | |
| 6 | import org.apache.lucene.index.AtomicReaderContext; |
| 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; |
| Eliza Margaretha | 609fcc6 | 2014-02-13 14:10:20 +0000 | [diff] [blame] | 12 | import org.apache.lucene.util.ToStringUtils; |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 13 | |
| 14 | import de.ids_mannheim.korap.query.spans.SegmentSpans; |
| 15 | |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 16 | /** Matching two spans having exactly the same start and end positions. |
| 17 | * @author margaretha |
| 18 | * */ |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 19 | public class SpanSegmentQuery extends SimpleSpanQuery{ |
| 20 | |
| Eliza Margaretha | 609fcc6 | 2014-02-13 14:10:20 +0000 | [diff] [blame] | 21 | private String spanName; |
| 22 | |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 23 | public SpanSegmentQuery(SpanQuery firstClause, SpanQuery secondClause) { |
| 24 | this(firstClause,secondClause,true); |
| 25 | } |
| 26 | |
| 27 | public SpanSegmentQuery(SpanQuery firstClause, SpanQuery secondClause, |
| 28 | boolean collectPayloads) { |
| Eliza Margaretha | 609fcc6 | 2014-02-13 14:10:20 +0000 | [diff] [blame] | 29 | super(firstClause,secondClause,collectPayloads); |
| 30 | spanName = "spanSegment"; |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 31 | } |
| 32 | |
| 33 | @Override |
| 34 | public Spans getSpans(AtomicReaderContext context, Bits acceptDocs, |
| 35 | Map<Term, TermContext> termContexts) throws IOException { |
| 36 | return (Spans) new SegmentSpans(this, context, acceptDocs, |
| Eliza Margaretha | 83b9537 | 2014-01-23 09:18:07 +0000 | [diff] [blame] | 37 | termContexts); |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 38 | } |
| 39 | |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 40 | @Override |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 41 | public SpanSegmentQuery clone() { |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 42 | SpanSegmentQuery spanSegmentQuery = new SpanSegmentQuery( |
| 43 | (SpanQuery) firstClause.clone(), |
| 44 | (SpanQuery) secondClause.clone(), |
| Eliza Margaretha | e3910e9 | 2014-02-12 11:01:23 +0000 | [diff] [blame] | 45 | collectPayloads |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 46 | ); |
| 47 | spanSegmentQuery.setBoost(getBoost()); |
| 48 | return spanSegmentQuery; |
| 49 | } |
| 50 | |
| Eliza Margaretha | 609fcc6 | 2014-02-13 14:10:20 +0000 | [diff] [blame] | 51 | @Override |
| 52 | public String toString(String field) { |
| 53 | StringBuilder sb = new StringBuilder(); |
| 54 | sb.append(this.spanName); |
| 55 | sb.append("("); |
| 56 | sb.append(firstClause.toString(field)); |
| 57 | sb.append(", "); |
| 58 | sb.append(secondClause.toString(field)); |
| 59 | sb.append(")"); |
| 60 | sb.append(ToStringUtils.boost(getBoost())); |
| 61 | return sb.toString(); |
| 62 | } |
| 63 | |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 64 | //TODO: Where is the hashmap? |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 65 | |
| 66 | @Override |
| 67 | public boolean equals(Object o) { |
| 68 | if (this == o) return true; |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 69 | if (!(o instanceof SpanSegmentQuery)) return false; |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 70 | |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 71 | SpanSegmentQuery spanSegmentQuery = (SpanSegmentQuery) o; |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 72 | |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 73 | if (collectPayloads != spanSegmentQuery.collectPayloads) return false; |
| 74 | if (!firstClause.equals(spanSegmentQuery.firstClause)) return false; |
| 75 | if (!secondClause.equals(spanSegmentQuery.secondClause)) return false; |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 76 | |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 77 | return getBoost() == spanSegmentQuery.getBoost(); |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 78 | }; |
| 79 | |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 80 | @Override |
| 81 | public int hashCode() { |
| 82 | int result; |
| 83 | result = firstClause.hashCode() + secondClause.hashCode(); |
| Eliza Margaretha | 83b9537 | 2014-01-23 09:18:07 +0000 | [diff] [blame] | 84 | result ^= (31 * result) + (result >>> 3); |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 85 | result += Float.floatToRawIntBits(getBoost()); |
| 86 | return result; |
| 87 | }; |
| Eliza Margaretha | f7bbb26 | 2014-01-14 17:17:29 +0000 | [diff] [blame] | 88 | |
| Eliza Margaretha | ed3bb3b | 2014-01-14 10:53:56 +0000 | [diff] [blame] | 89 | } |