blob: 19269aef1f301000e91d1de9c4701dcfc84aad42 [file] [log] [blame]
Nils Diewaldf399a672013-11-18 17:55:22 +00001package de.ids_mannheim.korap.query.wrap;
2
3import org.apache.lucene.search.spans.SpanQuery;
4
Nils Diewaldbe5943e2014-10-21 19:35:34 +00005import de.ids_mannheim.korap.util.QueryException;
6
Nils Diewaldcec40f92015-02-19 22:20:02 +00007import de.ids_mannheim.korap.query.SpanFocusQuery;
Nils Diewald92729ce2014-10-06 16:00:17 +00008import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
Nils Diewaldf399a672013-11-18 17:55:22 +00009
10import java.util.*;
11
Nils Diewald0981c212015-02-13 20:47:10 +000012// Support maybeUnsorted!
13// Rename this to SpanFocusQueryWrapper
14// Support multiple classes
15
16// Sorting:
17// - Sort with a buffer of matches, e.g. 25/50,
18// So gather 50 hits, sort them, return the first 25,
19// Add new 25, sort the last 50, return 25 etc.
20// On processing, there should be an ability to raise
21// a warning, in case an unordered result bubbles up.
Nils Diewaldf399a672013-11-18 17:55:22 +000022
Nils Diewaldcec40f92015-02-19 22:20:02 +000023public class SpanFocusQueryWrapper extends SpanQueryWrapper {
Nils Diewald92729ce2014-10-06 16:00:17 +000024 private SpanQueryWrapper subquery;
Nils Diewaldf399a672013-11-18 17:55:22 +000025 private byte number;
26
Nils Diewaldcec40f92015-02-19 22:20:02 +000027 public SpanFocusQueryWrapper (SpanQueryWrapper subquery, byte number) {
Nils Diewaldf399a672013-11-18 17:55:22 +000028 this.subquery = subquery;
29 this.number = number;
30 };
31
Nils Diewaldcec40f92015-02-19 22:20:02 +000032 public SpanFocusQueryWrapper (SpanQueryWrapper subquery, short number) {
Nils Diewaldf399a672013-11-18 17:55:22 +000033 this.subquery = subquery;
34 this.number = (byte) number;
35 };
36
Nils Diewaldcec40f92015-02-19 22:20:02 +000037 public SpanFocusQueryWrapper (SpanQueryWrapper subquery, int number) {
Nils Diewaldf399a672013-11-18 17:55:22 +000038 this.subquery = subquery;
39 this.number = (byte) number;
40 };
41
Nils Diewaldcec40f92015-02-19 22:20:02 +000042 public SpanFocusQueryWrapper (SpanQueryWrapper subquery) {
Nils Diewaldf399a672013-11-18 17:55:22 +000043 this.subquery = subquery;
Nils Diewald56dc2582014-11-04 21:33:46 +000044 this.number = (byte) 1;
Nils Diewaldf399a672013-11-18 17:55:22 +000045 };
46
Nils Diewaldbe5943e2014-10-21 19:35:34 +000047 public SpanQuery toQuery () throws QueryException {
Nils Diewaldb9dd4132015-02-16 16:32:41 +000048 if (this.subquery.isNull())
49 return (SpanQuery) null;
Nils Diewaldcec40f92015-02-19 22:20:02 +000050 return new SpanFocusQuery(
Nils Diewaldb9dd4132015-02-16 16:32:41 +000051 this.subquery.retrieveNode(this.retrieveNode).toQuery(), this.number
52 );
Nils Diewaldf399a672013-11-18 17:55:22 +000053 };
Nils Diewald6b332812014-07-22 18:51:05 +000054
55 public boolean isOptional () {
Nils Diewald602c9222014-07-23 19:49:53 +000056 return this.subquery.isOptional();
Nils Diewald6b332812014-07-22 18:51:05 +000057 };
58
59 public boolean isNull () {
60 return this.subquery.isNull();
61 };
Nils Diewaldcc7c0b32014-07-31 19:58:22 +000062
63 public boolean isNegative () {
64 return this.subquery.isNegative();
65 };
Nils Diewaldf399a672013-11-18 17:55:22 +000066};