| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +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; |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 9 | import org.apache.lucene.search.spans.SpanTermQuery; |
| 10 | import org.apache.lucene.search.spans.Spans; |
| 11 | import org.apache.lucene.util.Bits; |
| 12 | import org.apache.lucene.util.ToStringUtils; |
| 13 | |
| 14 | import de.ids_mannheim.korap.query.spans.AttributeSpans; |
| 15 | |
| Eliza Margaretha | c0a66f1 | 2014-07-24 11:03:19 +0000 | [diff] [blame] | 16 | /** 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 Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 23 | public class SpanAttributeQuery extends SimpleSpanQuery{ |
| Eliza Margaretha | 997ccde | 2014-07-04 09:20:35 +0000 | [diff] [blame] | 24 | |
| 25 | boolean isNegation; |
| 26 | |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 27 | public SpanAttributeQuery(SpanTermQuery firstClause, boolean collectPayloads) { |
| 28 | super(firstClause, collectPayloads); |
| 29 | } |
| Eliza Margaretha | 997ccde | 2014-07-04 09:20:35 +0000 | [diff] [blame] | 30 | |
| Eliza Margaretha | c0a66f1 | 2014-07-24 11:03:19 +0000 | [diff] [blame] | 31 | public SpanAttributeQuery(SpanTermQuery firstClause, boolean isNegation, |
| 32 | boolean collectPayloads) { |
| Eliza Margaretha | 997ccde | 2014-07-04 09:20:35 +0000 | [diff] [blame] | 33 | super(firstClause, collectPayloads); |
| 34 | this.isNegation = isNegation; |
| 35 | } |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 36 | |
| 37 | @Override |
| 38 | public SimpleSpanQuery clone() { |
| 39 | SpanAttributeQuery sq = new SpanAttributeQuery( |
| 40 | (SpanTermQuery) this.firstClause.clone(), |
| Eliza Margaretha | c0a66f1 | 2014-07-24 11:03:19 +0000 | [diff] [blame] | 41 | this.isNegation, |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 42 | 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 Margaretha | 7788a98 | 2014-08-29 16:10:52 +0000 | [diff] [blame] | 57 | sb.append(firstClause.toString(field)); |
| 58 | if (isNegation) |
| 59 | sb.append( ", not"); |
| 60 | sb.append(")"); |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 61 | sb.append(ToStringUtils.boost(getBoost())); |
| 62 | return sb.toString(); |
| 63 | } |
| 64 | |
| Eliza Margaretha | 997ccde | 2014-07-04 09:20:35 +0000 | [diff] [blame] | 65 | public boolean isNegation() { |
| 66 | return isNegation; |
| 67 | } |
| 68 | |
| 69 | public void setNegation(boolean isNegation) { |
| 70 | this.isNegation = isNegation; |
| 71 | } |
| 72 | |
| Eliza Margaretha | fb25cef | 2014-06-06 14:19:07 +0000 | [diff] [blame] | 73 | } |