| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query; |
| 2 | |
| 3 | import de.ids_mannheim.korap.KrillQuery; |
| 4 | import de.ids_mannheim.korap.query.wrap.*; |
| 5 | import org.apache.lucene.util.automaton.RegExp; |
| 6 | |
| 7 | import org.slf4j.Logger; |
| 8 | import org.slf4j.LoggerFactory; |
| 9 | |
| 10 | /** |
| 11 | * QueryBuilder implements a simple API for wrapping |
| 12 | * KrillQuery classes. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 13 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 14 | * Build complex queries. |
| 15 | * <blockquote><pre> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 16 | * QueryBuilder qb = new QueryBuilder("tokens"); |
| 17 | * SpanQueryWrapper sqw = (SpanQueryWrapper) |
| 18 | * qb.seq( |
| 19 | * qb.empty(), |
| 20 | * qb.seg( |
| 21 | * qb.re("mate/p=N.*"), |
| 22 | * qb.re("opennlp/p=N.*") |
| 23 | * ) |
| 24 | * ); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 25 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 26 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 27 | * @author diewald |
| 28 | */ |
| 29 | public class QueryBuilder { |
| 30 | private String field; |
| 31 | |
| 32 | // Logger |
| 33 | private final static Logger log = LoggerFactory.getLogger(KrillQuery.class); |
| 34 | |
| 35 | // This advices the java compiler to ignore all loggings |
| 36 | public static final boolean DEBUG = false; |
| 37 | |
| 38 | // <legacy> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 39 | public static final byte OVERLAP = SpanWithinQuery.OVERLAP, |
| 40 | REAL_OVERLAP = SpanWithinQuery.REAL_OVERLAP, |
| 41 | WITHIN = SpanWithinQuery.WITHIN, |
| 42 | REAL_WITHIN = SpanWithinQuery.REAL_WITHIN, |
| 43 | ENDSWITH = SpanWithinQuery.ENDSWITH, |
| 44 | STARTSWITH = SpanWithinQuery.STARTSWITH, |
| 45 | MATCH = SpanWithinQuery.MATCH; |
| 46 | |
| 47 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 48 | // </legacy> |
| 49 | |
| 50 | |
| 51 | /** |
| 52 | * Construct a new QueryBuilder object. |
| 53 | */ |
| 54 | public QueryBuilder (String field) { |
| 55 | this.field = field; |
| 56 | }; |
| 57 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 58 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 59 | /** |
| 60 | * Create a query object based on a regular expression. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 61 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 62 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 63 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 64 | * SpanRegexQueryWrapper re = kq.re(".+?"); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 65 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 66 | * |
| 67 | * @param re |
| 68 | * The regular expession as a string. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 69 | * @return A {@link SpanRegexQueryWrapper} object. |
| 70 | */ |
| 71 | public SpanRegexQueryWrapper re (String re) { |
| 72 | return new SpanRegexQueryWrapper(this.field, re, RegExp.ALL, false); |
| 73 | }; |
| 74 | |
| 75 | |
| 76 | /** |
| 77 | * Create a query object based on a regular expression. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 78 | * |
| 79 | * Supports flags as defined in |
| 80 | * {@link org.apache.lucene.util.automaton.RegExp}: |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 81 | * <ul> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 82 | * <li><tt>RegExp.ALL</tt> - enables all optional regexp |
| 83 | * syntax</li> |
| 84 | * <li><tt>RegExp.ANYSTRING</tt> - enables anystring (@)</li> |
| 85 | * <li><tt>RegExp.AUTOMATON</tt> - enables named automata |
| 86 | * (<identifier>)</li> |
| 87 | * <li><tt>RegExp.COMPLEMENT</tt> - enables complement (~)</li> |
| 88 | * <li><tt>RegExp.EMPTY</tt> - enables empty language (#)</li> |
| 89 | * <li><tt>RegExp.INTERSECTION</tt> - enables intersection |
| 90 | * (&)</li> |
| 91 | * <li><tt>RegExp.INTERVAL</tt> - enables numerical intervals |
| 92 | * (<n-m>)</li> |
| 93 | * <li><tt>RegExp.NONE</tt> - enables no optional regexp |
| 94 | * syntax</li> |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 95 | * </ul> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 96 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 97 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 98 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 99 | * SpanRegexQueryWrapper re = kq.re("[Aa]lternatives?", |
| 100 | * RegExp.NONE); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 101 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 102 | * |
| 103 | * @param re |
| 104 | * The regular expession as a string. |
| 105 | * @param flags |
| 106 | * The flag for the regular expression. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 107 | * @return A {@link SpanRegexQueryWrapper} object. |
| 108 | */ |
| 109 | public SpanRegexQueryWrapper re (String re, int flags) { |
| 110 | return new SpanRegexQueryWrapper(this.field, re, flags, false); |
| 111 | }; |
| 112 | |
| 113 | |
| 114 | /** |
| 115 | * Create a query object based on a regular expression. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 116 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 117 | * Supports flags (see above) and case insensitivity. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 118 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 119 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 120 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 121 | * SpanRegexQueryWrapper re = kq.re("alternatives?", RegExp.NONE, |
| 122 | * true); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 123 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 124 | * |
| 125 | * @param re |
| 126 | * The regular expession as a string. |
| 127 | * @param flags |
| 128 | * The flag for the regular expression. |
| 129 | * @param caseinsensitive |
| 130 | * A boolean value indicating case insensitivity. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 131 | * @return A {@link SpanRegexQueryWrapper} object. |
| 132 | */ |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 133 | public SpanRegexQueryWrapper re (String re, int flags, |
| 134 | boolean caseinsensitive) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 135 | return new SpanRegexQueryWrapper(this.field, re, flags, caseinsensitive); |
| 136 | }; |
| 137 | |
| 138 | |
| 139 | /** |
| 140 | * Create a query object based on a regular expression. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 141 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 142 | * Supports case insensitivity. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 143 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 144 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 145 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 146 | * SpanRegexQueryWrapper re = kq.re("alternatives?", true); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 147 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 148 | * |
| 149 | * @param re |
| 150 | * The regular expession as a string. |
| 151 | * @param flags |
| 152 | * The flag for the regular expression. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 153 | * @return A {@link SpanRegexQueryWrapper} object. |
| 154 | */ |
| 155 | public SpanRegexQueryWrapper re (String re, boolean caseinsensitive) { |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 156 | return new SpanRegexQueryWrapper(this.field, re, RegExp.ALL, |
| 157 | caseinsensitive); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 158 | }; |
| 159 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 160 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 161 | /** |
| 162 | * Create a query object based on a wildcard term. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 163 | * <tt>*</tt> indicates an optional sequence of arbitrary |
| 164 | * characters, |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 165 | * <tt>?</tt> indicates a single character, |
| 166 | * <tt>\</tt> can be used for escaping. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 167 | * |
| 168 | * @param wc |
| 169 | * The wildcard term as a string. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 170 | * @return A {@link SpanWildcardQueryWrapper} object. |
| 171 | */ |
| 172 | public SpanWildcardQueryWrapper wc (String wc) { |
| 173 | return new SpanWildcardQueryWrapper(this.field, wc, false); |
| 174 | }; |
| 175 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 176 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 177 | /** |
| 178 | * Create a query object based on a wildcard term. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 179 | * <tt>*</tt> indicates an optional sequence of arbitrary |
| 180 | * characters, |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 181 | * <tt>?</tt> indicates a single character, |
| 182 | * <tt>\</tt> can be used for escaping. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 183 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 184 | * Supports case insensitivity. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 185 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 186 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 187 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 188 | * SpanWildcardQueryWrapper wc = kq.wc("wall*", true); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 189 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 190 | * |
| 191 | * @param wc |
| 192 | * The wildcard term as a string. |
| 193 | * @param caseinsensitive |
| 194 | * A boolean value indicating case insensitivity. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 195 | * @return A {@link SpanWildcardQueryWrapper} object. |
| 196 | */ |
| 197 | public SpanWildcardQueryWrapper wc (String wc, boolean caseinsensitive) { |
| 198 | return new SpanWildcardQueryWrapper(this.field, wc, caseinsensitive); |
| 199 | }; |
| 200 | |
| 201 | |
| 202 | /** |
| 203 | * Create a segment query object. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 204 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 205 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 206 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 207 | * SpanSegmentQueryWrapper seg = kq.seg(); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 208 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 209 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 210 | * @return A {@link SpanSegmentQueryWrapper} object. |
| 211 | */ |
| 212 | public SpanSegmentQueryWrapper seg () { |
| 213 | return new SpanSegmentQueryWrapper(this.field); |
| 214 | }; |
| 215 | |
| 216 | |
| 217 | /** |
| 218 | * Create a segment query object. |
| 219 | * Supports sequences of strings or {@link SpanRegexQueryWrapper}, |
| 220 | * and {@link SpanAlterQueryWrapper} objects. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 221 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 222 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 223 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 224 | * SpanSegmentQueryWrapper seg = kq.seg( |
| 225 | * kq.re("mate/p=.*?"), |
| 226 | * kq.re("opennlp/p=.*?") |
| 227 | * ); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 228 | * </pre></blockquote> |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 229 | * |
| 230 | * @param terms |
| 231 | * [] An array of terms, the segment consists of. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 232 | * @return A {@link SpanSegmentQueryWrapper} object. |
| 233 | */ |
| 234 | // Sequence of regular expression queries |
| 235 | public SpanSegmentQueryWrapper seg (SpanRegexQueryWrapper ... terms) { |
| 236 | SpanSegmentQueryWrapper ssq = new SpanSegmentQueryWrapper(this.field); |
| 237 | for (SpanRegexQueryWrapper t : terms) |
| 238 | ssq.with(t); |
| 239 | return ssq; |
| 240 | }; |
| 241 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 242 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 243 | // Sequence of alternative queries |
| 244 | public SpanSegmentQueryWrapper seg (SpanAlterQueryWrapper ... terms) { |
| 245 | SpanSegmentQueryWrapper ssq = new SpanSegmentQueryWrapper(this.field); |
| 246 | for (SpanAlterQueryWrapper t : terms) |
| 247 | ssq.with(t); |
| 248 | return ssq; |
| 249 | }; |
| 250 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 251 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 252 | // Sequence of alternative queries |
| 253 | public SpanSegmentQueryWrapper seg (String ... terms) { |
| 254 | SpanSegmentQueryWrapper ssq = new SpanSegmentQueryWrapper(this.field); |
| 255 | for (String t : terms) |
| 256 | ssq.with(t); |
| 257 | return ssq; |
| 258 | }; |
| 259 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 260 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 261 | /** |
| 262 | * Create an empty query segment. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 263 | * |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 264 | * <blockquote><pre> |
| Akron | 74748c6 | 2016-06-29 00:22:43 +0200 | [diff] [blame] | 265 | * QueryBuilder kq = new QueryBuilder("tokens"); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 266 | * SpanRepetitionQueryWrapper seg = kq.empty(); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 267 | * </pre></blockquote> |
| 268 | */ |
| 269 | public SpanRepetitionQueryWrapper empty () { |
| 270 | return new SpanRepetitionQueryWrapper(); |
| 271 | }; |
| 272 | |
| 273 | |
| 274 | // TODO: Further JavaDocs |
| 275 | |
| 276 | |
| 277 | /** |
| 278 | * Create a segment alternation query object. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 279 | * |
| 280 | * @param terms |
| 281 | * [] An array of alternative terms. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 282 | */ |
| 283 | public SpanAlterQueryWrapper or (SpanQueryWrapper ... terms) { |
| 284 | SpanAlterQueryWrapper ssaq = new SpanAlterQueryWrapper(this.field); |
| 285 | for (SpanQueryWrapper t : terms) |
| 286 | ssaq.or(t); |
| 287 | return ssaq; |
| 288 | }; |
| 289 | |
| 290 | |
| 291 | public SpanAlterQueryWrapper or (String ... terms) { |
| 292 | SpanAlterQueryWrapper ssaq = new SpanAlterQueryWrapper(this.field); |
| 293 | for (String t : terms) |
| 294 | ssaq.or(t); |
| 295 | return ssaq; |
| 296 | }; |
| 297 | |
| 298 | |
| 299 | // SpanSegmentSequenceQueries |
| 300 | /** |
| 301 | * Create a sequence of segments query object. |
| 302 | */ |
| 303 | public SpanSequenceQueryWrapper seq () { |
| 304 | return new SpanSequenceQueryWrapper(this.field); |
| 305 | }; |
| 306 | |
| 307 | |
| 308 | /** |
| 309 | * Create a sequence of segments query object. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 310 | * |
| 311 | * @param terms |
| 312 | * [] An array of segment defining terms. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 313 | */ |
| 314 | public SpanSequenceQueryWrapper seq (SpanQueryWrapper ... terms) { |
| 315 | SpanSequenceQueryWrapper sssq = new SpanSequenceQueryWrapper(this.field); |
| 316 | for (SpanQueryWrapper t : terms) |
| 317 | sssq.append(t); |
| 318 | return sssq; |
| 319 | }; |
| 320 | |
| 321 | |
| 322 | /** |
| 323 | * Create a sequence of segments query object. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 324 | * |
| 325 | * @param re |
| 326 | * A SpanSegmentRegexQuery, starting the sequence. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 327 | */ |
| 328 | public SpanSequenceQueryWrapper seq (SpanRegexQueryWrapper re) { |
| 329 | return new SpanSequenceQueryWrapper(this.field, re); |
| 330 | }; |
| 331 | |
| 332 | |
| 333 | public SpanSequenceQueryWrapper seq (Object ... terms) { |
| 334 | SpanSequenceQueryWrapper ssq = new SpanSequenceQueryWrapper(this.field); |
| 335 | for (Object t : terms) { |
| 336 | if (t instanceof SpanQueryWrapper) { |
| 337 | ssq.append((SpanQueryWrapper) t); |
| 338 | } |
| 339 | else if (t instanceof SpanRegexQueryWrapper) { |
| 340 | ssq.append((SpanRegexQueryWrapper) t); |
| 341 | } |
| 342 | else { |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 343 | log.error("{} is not an acceptable parameter for seq()", |
| 344 | t.getClass()); |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 345 | return ssq; |
| 346 | }; |
| 347 | }; |
| 348 | return ssq; |
| 349 | }; |
| 350 | |
| 351 | |
| 352 | public SpanElementQueryWrapper tag (String element) { |
| 353 | return new SpanElementQueryWrapper(this.field, element); |
| 354 | }; |
| 355 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 356 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 357 | /** |
| 358 | * Create a wrapping within query object. |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 359 | * |
| 360 | * @param element |
| 361 | * A SpanQuery. |
| 362 | * @param embedded |
| 363 | * A SpanQuery that is wrapped in the element. |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 364 | */ |
| 365 | @Deprecated |
| 366 | public SpanWithinQueryWrapper within (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 367 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 368 | return new SpanWithinQueryWrapper(element, embedded); |
| 369 | }; |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 370 | |
| 371 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 372 | public SpanWithinQueryWrapper contains (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 373 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 374 | return new SpanWithinQueryWrapper(element, embedded, WITHIN); |
| 375 | }; |
| 376 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 377 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 378 | public SpanWithinQueryWrapper startswith (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 379 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 380 | return new SpanWithinQueryWrapper(element, embedded, STARTSWITH); |
| 381 | }; |
| 382 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 383 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 384 | public SpanWithinQueryWrapper endswith (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 385 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 386 | return new SpanWithinQueryWrapper(element, embedded, ENDSWITH); |
| 387 | }; |
| 388 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 389 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 390 | public SpanWithinQueryWrapper overlaps (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 391 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 392 | return new SpanWithinQueryWrapper(element, embedded, OVERLAP); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 393 | }; |
| 394 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 395 | |
| 396 | public SpanWithinQueryWrapper matches (SpanQueryWrapper element, |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 397 | SpanQueryWrapper embedded) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 398 | return new SpanWithinQueryWrapper(element, embedded, MATCH); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 399 | }; |
| 400 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 401 | |
| 402 | // Class |
| 403 | public SpanClassQueryWrapper _ (byte number, SpanQueryWrapper element) { |
| 404 | return new SpanClassQueryWrapper(element, number); |
| 405 | }; |
| 406 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 407 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 408 | public SpanClassQueryWrapper _ (int number, SpanQueryWrapper element) { |
| 409 | return new SpanClassQueryWrapper(element, number); |
| 410 | }; |
| 411 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 412 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 413 | public SpanClassQueryWrapper _ (short number, SpanQueryWrapper element) { |
| 414 | return new SpanClassQueryWrapper(element, number); |
| 415 | }; |
| 416 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 417 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 418 | public SpanClassQueryWrapper _ (SpanQueryWrapper element) { |
| 419 | return new SpanClassQueryWrapper(element); |
| 420 | }; |
| 421 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 422 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 423 | // Focus |
| 424 | public SpanFocusQueryWrapper focus (byte number, SpanQueryWrapper element) { |
| 425 | return new SpanFocusQueryWrapper(element, number); |
| 426 | }; |
| 427 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 428 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 429 | public SpanFocusQueryWrapper focus (int number, SpanQueryWrapper element) { |
| 430 | return new SpanFocusQueryWrapper(element, number); |
| 431 | }; |
| 432 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 433 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 434 | public SpanFocusQueryWrapper focus (short number, SpanQueryWrapper element) { |
| 435 | return new SpanFocusQueryWrapper(element, number); |
| 436 | }; |
| 437 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 438 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 439 | public SpanFocusQueryWrapper focus (SpanQueryWrapper element) { |
| 440 | return new SpanFocusQueryWrapper(element); |
| 441 | }; |
| 442 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 443 | |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 444 | // Repetition |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 445 | public SpanRepetitionQueryWrapper repeat (SpanQueryWrapper element, |
| 446 | int exact) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 447 | return new SpanRepetitionQueryWrapper(element, exact); |
| 448 | }; |
| 449 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 450 | |
| 451 | public SpanRepetitionQueryWrapper repeat (SpanQueryWrapper element, |
| 452 | int min, int max) { |
| Nils Diewald | 488a3ba | 2015-02-26 16:15:16 +0000 | [diff] [blame] | 453 | return new SpanRepetitionQueryWrapper(element, min, max); |
| 454 | }; |
| 455 | }; |