blob: 9e0741ea65dad84374b76294212935bca6649b95 [file] [log] [blame]
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +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;
9import org.apache.lucene.search.spans.SpanQuery;
10import org.apache.lucene.search.spans.Spans;
11import org.apache.lucene.util.Bits;
Eliza Margaretha609fcc62014-02-13 14:10:20 +000012import org.apache.lucene.util.ToStringUtils;
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000013
14import de.ids_mannheim.korap.query.spans.SegmentSpans;
15
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000016/** Matching two spans having exactly the same start and end positions.
17 * @author margaretha
18 * */
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000019public class SpanSegmentQuery extends SimpleSpanQuery{
20
Eliza Margaretha609fcc62014-02-13 14:10:20 +000021 private String spanName;
22
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000023 public SpanSegmentQuery(SpanQuery firstClause, SpanQuery secondClause) {
24 this(firstClause,secondClause,true);
25 }
26
27 public SpanSegmentQuery(SpanQuery firstClause, SpanQuery secondClause,
28 boolean collectPayloads) {
Eliza Margaretha609fcc62014-02-13 14:10:20 +000029 super(firstClause,secondClause,collectPayloads);
30 spanName = "spanSegment";
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000031 }
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 Margaretha83b95372014-01-23 09:18:07 +000037 termContexts);
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000038 }
39
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000040 @Override
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000041 public SpanSegmentQuery clone() {
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000042 SpanSegmentQuery spanSegmentQuery = new SpanSegmentQuery(
43 (SpanQuery) firstClause.clone(),
44 (SpanQuery) secondClause.clone(),
Eliza Margarethae3910e92014-02-12 11:01:23 +000045 collectPayloads
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000046 );
47 spanSegmentQuery.setBoost(getBoost());
48 return spanSegmentQuery;
49 }
50
Eliza Margaretha609fcc62014-02-13 14:10:20 +000051 @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 Margarethaf7bbb262014-01-14 17:17:29 +000064 //TODO: Where is the hashmap?
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000065
66 @Override
67 public boolean equals(Object o) {
68 if (this == o) return true;
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000069 if (!(o instanceof SpanSegmentQuery)) return false;
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000070
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000071 SpanSegmentQuery spanSegmentQuery = (SpanSegmentQuery) o;
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000072
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000073 if (collectPayloads != spanSegmentQuery.collectPayloads) return false;
74 if (!firstClause.equals(spanSegmentQuery.firstClause)) return false;
75 if (!secondClause.equals(spanSegmentQuery.secondClause)) return false;
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000076
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000077 return getBoost() == spanSegmentQuery.getBoost();
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000078 };
79
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000080 @Override
81 public int hashCode() {
82 int result;
83 result = firstClause.hashCode() + secondClause.hashCode();
Eliza Margaretha83b95372014-01-23 09:18:07 +000084 result ^= (31 * result) + (result >>> 3);
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000085 result += Float.floatToRawIntBits(getBoost());
86 return result;
87 };
Eliza Margarethaf7bbb262014-01-14 17:17:29 +000088
Eliza Margarethaed3bb3b2014-01-14 10:53:56 +000089}