blob: 7bd2bb8a7e83773ed4647489b85dc0c09d86bd45 [file] [log] [blame]
Eliza Margarethab0e91432014-01-28 15:26:31 +00001package de.ids_mannheim.korap.index;
2
3import static org.junit.Assert.assertEquals;
Eliza Margaretha40260542014-10-01 10:32:09 +00004import static org.junit.Assert.fail;
Eliza Margarethab0e91432014-01-28 15:26:31 +00005
Akronc12567c2016-06-03 00:40:52 +02006import java.util.*;
7import java.io.*;
Akron67d2ff02018-06-19 10:51:16 +02008import static de.ids_mannheim.korap.TestSimple.*;
Eliza Margarethab0e91432014-01-28 15:26:31 +00009
10import org.apache.lucene.index.Term;
margarethae3a166c2021-09-30 16:57:24 +020011import org.apache.lucene.search.spans.SpanOrQuery;
Eliza Margarethab0e91432014-01-28 15:26:31 +000012import org.apache.lucene.search.spans.SpanQuery;
13import org.apache.lucene.search.spans.SpanTermQuery;
14import org.junit.Test;
15import org.junit.runner.RunWith;
16import org.junit.runners.JUnit4;
17
Nils Diewalda14ecd62015-02-26 21:00:20 +000018import de.ids_mannheim.korap.KrillIndex;
Nils Diewald0339d462015-02-26 14:53:56 +000019import de.ids_mannheim.korap.KrillQuery;
Eliza Margarethad4693462014-03-17 13:16:18 +000020import de.ids_mannheim.korap.query.DistanceConstraint;
margaretha71c66ee2015-12-11 14:39:55 +010021import de.ids_mannheim.korap.query.QueryBuilder;
Eliza Margarethab0e91432014-01-28 15:26:31 +000022import de.ids_mannheim.korap.query.SpanDistanceQuery;
23import de.ids_mannheim.korap.query.SpanElementQuery;
Eliza Margarethafead2062014-01-28 16:34:09 +000024import de.ids_mannheim.korap.query.SpanNextQuery;
Nils Diewald92729ce2014-10-06 16:00:17 +000025import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
margarethac66265c2016-12-14 13:48:45 +010026import de.ids_mannheim.korap.response.Match;
margaretha71c66ee2015-12-11 14:39:55 +010027import de.ids_mannheim.korap.response.Result;
Eliza Margaretha40260542014-10-01 10:32:09 +000028import de.ids_mannheim.korap.util.QueryException;
Eliza Margarethab0e91432014-01-28 15:26:31 +000029
margarethac66265c2016-12-14 13:48:45 +010030/**
31 * @author margaretha
32 *
33 */
Eliza Margarethab0e91432014-01-28 15:26:31 +000034@RunWith(JUnit4.class)
Eliza Margaretha1751dbf2014-02-03 09:47:19 +000035public class TestElementDistanceIndex {
Nils Diewaldbb33da22015-03-04 16:24:25 +000036
37 Result kr;
38 KrillIndex ki;
39
Nils Diewaldbb33da22015-03-04 16:24:25 +000040 private FieldDocument createFieldDoc0 () {
41 FieldDocument fd = new FieldDocument();
Eliza Margarethab0e91432014-01-28 15:26:31 +000042 fd.addString("ID", "doc-0");
margaretha93d0d622017-01-04 14:53:33 +010043 fd.addTV("tokens", "bbcbbb",
margaretha4f995582015-12-14 14:14:34 +010044 "[(0-1)s:b|s:c|_1$<i>0<i>1|<>:s$<b>64<i>0<i>1<i>1<b>0]"
margaretha71c66ee2015-12-11 14:39:55 +010045 + "[(1-2)s:b|_2$<i>1<i>2]"
margaretha4f995582015-12-14 14:14:34 +010046 + "[(2-3)s:c|_3$<i>2<i>3|<>:s$<b>64<i>2<i>3<i>3<b>0]"
47 + "[(3-4)s:b|_4$<i>3<i>4|<>:s$<b>64<i>3<i>4<i>4<b>0]"
48 + "[(4-5)s:b|_5$<i>4<i>5|<>:s$<b>64<i>4<i>5<i>5<b>0]"
margaretha93d0d622017-01-04 14:53:33 +010049 + "[(5-6)s:b|_6$<i>5<i>6]"
50 + "[(6-7)s:c|_7$<i>6<i>7|<>:s$<b>64<i>6<i>7<i>7<b>0]");
Eliza Margarethab0e91432014-01-28 15:26:31 +000051 return fd;
Nils Diewaldbb33da22015-03-04 16:24:25 +000052 }
53
Nils Diewaldbb33da22015-03-04 16:24:25 +000054 private FieldDocument createFieldDoc1 () {
55 FieldDocument fd = new FieldDocument();
Eliza Margarethab0e91432014-01-28 15:26:31 +000056 fd.addString("ID", "doc-1");
Eliza Margaretha6f989202016-10-14 21:48:29 +020057 fd.addTV("tokens", "ecebdc",
Akron19b4be22016-06-03 14:27:24 +020058 "[(0-1)s:e|_1$<i>0<i>1|<>:base/s:t$<b>64<i>0<i>6<i>6<b>0|<>:s$<b>64<i>0<i>2<i>1<b>0]"
margaretha4f995582015-12-14 14:14:34 +010059 + "[(1-2)s:c|s:b|_2$<i>1<i>2|<>:s$<b>64<i>1<i>2<i>2<b>0]"
60 + "[(2-3)s:e|_3$<i>2<i>3|<>:s$<b>64<i>2<i>3<i>3<b>0]"
61 + "[(3-4)s:b|_4$<i>3<i>4|<>:s$<b>64<i>3<i>4<i>4<b>0]"
margaretha93d0d622017-01-04 14:53:33 +010062 + "[(4-5)s:c|_5$<i>4<i>5|<>:s$<b>64<i>4<i>5<i>5<b>0]"
margaretha4f995582015-12-14 14:14:34 +010063 + "[(5-6)s:c|_6$<i>5<i>6|<>:s$<b>64<i>5<i>6<i>6<b>0]");
Eliza Margarethab0e91432014-01-28 15:26:31 +000064 return fd;
Nils Diewaldbb33da22015-03-04 16:24:25 +000065 }
66
Nils Diewaldbb33da22015-03-04 16:24:25 +000067 private FieldDocument createFieldDoc2 () {
68 FieldDocument fd = new FieldDocument();
Eliza Margaretha8f9934c2014-02-06 13:04:32 +000069 fd.addString("ID", "doc-2");
margaretha93d0d622017-01-04 14:53:33 +010070 fd.addTV("tokens", "bbbddd",
margaretha4f995582015-12-14 14:14:34 +010071 "[(0-1)s:b|_1$<i>0<i>1|<>:p$<b>64<i>0<i>2<i>1<b>0]"
margaretha71c66ee2015-12-11 14:39:55 +010072 + "[(1-2)s:b|_2$<i>1<i>2]"
margaretha4f995582015-12-14 14:14:34 +010073 + "[(2-3)s:b|_3$<i>2<i>3|<>:p$<b>64<i>2<i>3<i>3<b>0]"
74 + "[(3-4)s:d|_4$<i>3<i>4|<>:p$<b>64<i>3<i>4<i>4<b>0]"
75 + "[(4-5)s:d|_5$<i>4<i>5|<>:p$<b>64<i>4<i>5<i>5<b>0]"
margaretha71c66ee2015-12-11 14:39:55 +010076 + "[(5-6)s:d|_6$<i>5<i>6]");
Eliza Margarethab0e91432014-01-28 15:26:31 +000077 return fd;
Nils Diewaldbb33da22015-03-04 16:24:25 +000078 }
79
Nils Diewaldbb33da22015-03-04 16:24:25 +000080 private FieldDocument createFieldDoc3 () {
81 FieldDocument fd = new FieldDocument();
Eliza Margaretha8f9934c2014-02-06 13:04:32 +000082 fd.addString("ID", "doc-3");
margaretha93d0d622017-01-04 14:53:33 +010083 fd.addTV("tokens", "bdbcdd",
margaretha4f995582015-12-14 14:14:34 +010084 "[(0-1)s:b|_1$<i>0<i>1|<>:s$<b>64<i>0<i>2<i>1<b>0]"
margaretha71c66ee2015-12-11 14:39:55 +010085 + "[(1-2)s:d|_2$<i>1<i>2]"
margaretha4f995582015-12-14 14:14:34 +010086 + "[(2-3)s:b|_3$<i>2<i>3|<>:s$<b>64<i>2<i>3<i>3<b>0]"
margarethae3a166c2021-09-30 16:57:24 +020087 + "[(3-4)s:c|_4$<i>3<i>4|<>:s$<b>64<i>3<i>5<i>5<b>0]"
margaretha4f995582015-12-14 14:14:34 +010088 + "[(4-5)s:d|_5$<i>4<i>5|<>:s$<b>64<i>4<i>5<i>5<b>0]"
margaretha71c66ee2015-12-11 14:39:55 +010089 + "[(5-6)s:d|_6$<i>5<i>6]");
Eliza Margarethafead2062014-01-28 16:34:09 +000090 return fd;
Nils Diewaldbb33da22015-03-04 16:24:25 +000091 }
margaretha9614d972019-07-17 15:05:32 +020092
margaretha4ad135c2017-01-12 12:49:44 +010093 private FieldDocument createFieldDoc4 () {
94 FieldDocument fd = new FieldDocument();
95 fd.addString("ID", "doc-4");
96 fd.addTV("tokens", "bdbcdd",
97 "[(0-1)s:b|_1$<i>0<i>1|<>:s$<b>64<i>0<i>2<i>1<b>0]"
98 + "[(1-2)s:d|_2$<i>1<i>2]"
99 + "[(2-3)s:c|s:b|_3$<i>2<i>3|<>:s$<b>64<i>2<i>5<i>3<b>0]"
100 + "[(3-4)s:c|_4$<i>3<i>4|<>:s$<b>64<i>3<i>5<i>4<b>0]"
101 + "[(4-5)s:d|_5$<i>4<i>5|<>:s$<b>64<i>4<i>5<i>5<b>0]"
102 + "[(5-6)s:d|_6$<i>5<i>6]");
103 return fd;
104 }
margarethae3a166c2021-09-30 16:57:24 +0200105
106 private FieldDocument createFieldDoc5 () {
107 FieldDocument fd = new FieldDocument();
108 fd.addString("ID", "doc-5");
109 fd.addTV("tokens", "edef",
110 "[(0-1)s:e|_1$<i>0<i>1]"
111 + "[(1-2)s:d|_2$<i>1<i>2]"
112 + "[(2-3)s:e|_3$<i>2<i>3]"
113 + "[(3-4)s:f|_4$<i>3<i>4]");
114 return fd;
115 }
Nils Diewaldbb33da22015-03-04 16:24:25 +0000116
Nils Diewaldbb33da22015-03-04 16:24:25 +0000117 public SpanQuery createQuery (String elementType, String x, String y,
118 int min, int max, boolean isOrdered) {
119
Akronc12567c2016-06-03 00:40:52 +0200120 SpanElementQuery e = new SpanElementQuery("tokens", elementType);
121 return new SpanDistanceQuery(new SpanTermQuery(new Term("tokens", x)),
122 new SpanTermQuery(new Term("tokens", y)),
123 new DistanceConstraint(e, min, max, isOrdered, false), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000124 }
125
Nils Diewaldbb33da22015-03-04 16:24:25 +0000126 /**
127 * Multiple documents
128 * Ensure terms and elements are in the same doc
129 * Ensure terms are in elements
130 * Check filter candidate list
Eliza Margaretha6f989202016-10-14 21:48:29 +0200131 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000132 @Test
133 public void testCase1 () throws IOException {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000134 ki = new KrillIndex();
135 ki.addDoc(createFieldDoc0());
136 ki.addDoc(createFieldDoc1());
margaretha93d0d622017-01-04 14:53:33 +0100137 ki.addDoc(createFieldDoc3());
Eliza Margarethab0e91432014-01-28 15:26:31 +0000138 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000139
140 SpanQuery sq;
margaretha93d0d622017-01-04 14:53:33 +0100141 sq = createQuery("s", "s:b", "s:c", 1, 1, true);
Akrond2926902016-02-13 18:37:36 +0100142
Eliza Margarethab0e91432014-01-28 15:26:31 +0000143 kr = ki.search(sq, (short) 10);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000144
margaretha93d0d622017-01-04 14:53:33 +0100145 assertEquals(4, kr.getTotalResults());
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000146 assertEquals(0, kr.getMatch(0).startPos);
margaretha93d0d622017-01-04 14:53:33 +0100147 assertEquals(3, kr.getMatch(0).endPos);
148 assertEquals(4, kr.getMatch(1).startPos);
149 assertEquals(7, kr.getMatch(1).endPos);
150 assertEquals(3, kr.getMatch(2).startPos);
151 assertEquals(5, kr.getMatch(2).endPos);
152 assertEquals(2, kr.getMatch(3).startPos);
153 assertEquals(4, kr.getMatch(3).endPos);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000154 }
155
margaretha4ad135c2017-01-12 12:49:44 +0100156 /**
157 * Ignore nested element distance unit
margaretha9614d972019-07-17 15:05:32 +0200158 */
margaretha4ad135c2017-01-12 12:49:44 +0100159 @Test
160 public void testCase1b () throws IOException {
161 ki = new KrillIndex();
162 ki.addDoc(createFieldDoc4());
163 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000164
margaretha4ad135c2017-01-12 12:49:44 +0100165 SpanQuery sq;
166 sq = createQuery("s", "s:b", "s:c", 1, 1, true);
167
168 kr = ki.search(sq, (short) 10);
169
170 assertEquals(2, kr.getTotalResults());
171 assertEquals(0, kr.getMatch(0).startPos);
172 assertEquals(3, kr.getMatch(0).endPos);
173 assertEquals(2, kr.getMatch(1).startPos);
174 assertEquals(4, kr.getMatch(1).endPos);
175 }
176
Nils Diewaldbb33da22015-03-04 16:24:25 +0000177 /**
178 * Ensure terms and elements are in the same doc
Eliza Margaretha6f989202016-10-14 21:48:29 +0200179 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000180 @Test
181 public void testCase2 () throws IOException {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000182 ki = new KrillIndex();
183 ki.addDoc(createFieldDoc0());
Eliza Margarethab0e91432014-01-28 15:26:31 +0000184 ki.addDoc(createFieldDoc1());
185 ki.addDoc(createFieldDoc2());
186 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000187
Eliza Margarethab0e91432014-01-28 15:26:31 +0000188 SpanQuery sq;
Nils Diewaldbb33da22015-03-04 16:24:25 +0000189 sq = createQuery("p", "s:b", "s:d", 1, 1, true);
Eliza Margarethab0e91432014-01-28 15:26:31 +0000190 kr = ki.search(sq, (short) 10);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000191
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000192 assertEquals(kr.getTotalResults(), 1);
193 assertEquals(2, kr.getMatch(0).getLocalDocID());
194 assertEquals(2, kr.getMatch(0).startPos);
195 assertEquals(4, kr.getMatch(0).endPos);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000196
197 }
198
Nils Diewaldbb33da22015-03-04 16:24:25 +0000199 /** Skip to */
200 @Test
201 public void testCase3 () throws IOException {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000202 ki = new KrillIndex();
203 ki.addDoc(createFieldDoc0());
Eliza Margarethafead2062014-01-28 16:34:09 +0000204 ki.addDoc(createFieldDoc1());
205 ki.addDoc(createFieldDoc3());
206 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000207
Eliza Margarethafead2062014-01-28 16:34:09 +0000208 SpanQuery sq, edq;
Nils Diewaldbb33da22015-03-04 16:24:25 +0000209 edq = createQuery("s", "s:b", "s:c", 1, 1, true);
210
Akronc12567c2016-06-03 00:40:52 +0200211 sq = new SpanNextQuery(edq,
212 new SpanTermQuery(new Term("tokens", "s:d")));
Nils Diewaldbb33da22015-03-04 16:24:25 +0000213
Eliza Margarethafead2062014-01-28 16:34:09 +0000214 kr = ki.search(sq, (short) 10);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000215
margaretha93d0d622017-01-04 14:53:33 +0100216 assertEquals(1, kr.getTotalResults());
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000217 assertEquals(2, kr.getMatch(0).getLocalDocID());
218 assertEquals(2, kr.getMatch(0).startPos);
219 assertEquals(5, kr.getMatch(0).endPos);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000220
221 }
222
Nils Diewaldbb33da22015-03-04 16:24:25 +0000223 /** Same tokens in different elements */
224 @Test
225 public void testCase4 () throws IOException {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000226 ki = new KrillIndex();
227 ki.addDoc(createFieldDoc0());
Eliza Margaretha45b5be12014-02-04 11:22:46 +0000228 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000229
Eliza Margaretha45b5be12014-02-04 11:22:46 +0000230 SpanQuery sq;
Nils Diewaldbb33da22015-03-04 16:24:25 +0000231 sq = createQuery("s", "s:b", "s:b", 1, 2, true);
Eliza Margaretha45b5be12014-02-04 11:22:46 +0000232 kr = ki.search(sq, (short) 10);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000233
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000234 assertEquals(kr.getTotalResults(), 2);
235 assertEquals(0, kr.getMatch(0).startPos);
236 assertEquals(4, kr.getMatch(0).endPos);
237 assertEquals(3, kr.getMatch(1).startPos);
238 assertEquals(5, kr.getMatch(1).endPos);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000239
Eliza Margaretha40260542014-10-01 10:32:09 +0000240 }
Nils Diewaldbb33da22015-03-04 16:24:25 +0000241
Nils Diewaldbb33da22015-03-04 16:24:25 +0000242 /** Test query from json */
243 @Test
244 public void testCase5 () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000245 ki = new KrillIndex();
246 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
Eliza Margaretha40260542014-10-01 10:32:09 +0000247 ki.commit();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000248
margaretha9614d972019-07-17 15:05:32 +0200249 String jsonPath =
250 getClass().getResource("/queries/cosmas1.json").getFile();
Akrond6f5f592018-06-19 15:58:16 +0200251 SpanQueryWrapper sqwi = getJsonQuery(jsonPath);
Akronc12567c2016-06-03 00:40:52 +0200252 kr = ki.search(sqwi.toQuery(), (short) 10);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000253
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000254 assertEquals((long) 3, kr.getTotalResults());
Eliza Margaretha42b407b2014-10-01 10:36:33 +0000255 assertEquals(14, kr.getMatch(0).startPos);
256 assertEquals(19, kr.getMatch(0).endPos);
257 assertEquals(30, kr.getMatch(1).startPos);
258 assertEquals(33, kr.getMatch(1).endPos);
Eliza Margaretha40260542014-10-01 10:32:09 +0000259 }
Nils Diewaldbb33da22015-03-04 16:24:25 +0000260
margaretha9614d972019-07-17 15:05:32 +0200261 @Test
262 public void testCQLAnd () throws Exception {
263 ki = new KrillIndex();
264 ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
265 ki.commit();
266
267 String jsonPath = getClass()
268 .getResource("/queries/distances/cql-and.jsonld").getFile();
269 SpanQueryWrapper sqwi = getJsonQuery(jsonPath);
270 SpanQuery query = sqwi.toQuery();
271 assertEquals(
272 "spanElementDistance(tokens:s:Buchstaben, tokens:s:Alphabet, "
273 + "[(base/s:s[0:0], notOrdered, notExcluded)])",
274 query.toString());
275 kr = ki.search(sqwi.toQuery(), (short) 10);
276
277 assertEquals((long) 1, kr.getTotalResults());
278 }
Nils Diewaldbb33da22015-03-04 16:24:25 +0000279
Akronc12567c2016-06-03 00:40:52 +0200280 /** Test query from json (2) */
281 @Test
282 public void testCase6 () throws Exception {
283 ki = new KrillIndex();
284 ki.addDoc(createFieldDoc0());
285 ki.addDoc(createFieldDoc1());
286 ki.addDoc(createFieldDoc2());
287 ki.commit();
288
289 SpanQueryWrapper sqwi;
290 sqwi = new QueryBuilder("tokens").tag("base/s:t");
291
292 kr = ki.search(sqwi.toQuery(), (short) 10);
293 assertEquals(kr.getTotalResults(), 1);
Akronf05fde62016-08-03 23:46:17 +0200294 assertEquals("[[ecebdc]]", kr.getMatch(0).getSnippetBrackets());
Akronc12567c2016-06-03 00:40:52 +0200295
Akron67d2ff02018-06-19 10:51:16 +0200296 String jsonPath = getClass()
297 .getResource("/queries/distances/in-same-t.jsonld").getFile();
Akrond6f5f592018-06-19 15:58:16 +0200298 sqwi = getJsonQuery(jsonPath);
Akronc12567c2016-06-03 00:40:52 +0200299
300 assertEquals(
301 "spanElementDistance(tokens:s:c, tokens:s:e, [(base/s:t[0:0], ordered, notExcluded)])",
302 sqwi.toQuery().toString());
303
Akronc12567c2016-06-03 00:40:52 +0200304 kr = ki.search(sqwi.toQuery(), (short) 10);
margaretha9614d972019-07-17 15:05:32 +0200305 assertEquals(1, kr.getTotalResults()); // Is 1 correct or
306 // should it not be
307 // ordered?
Akronf05fde62016-08-03 23:46:17 +0200308 assertEquals("[[ec]]ebdc", kr.getMatch(0).getSnippetBrackets());
margarethac66265c2016-12-14 13:48:45 +0100309 }
margarethae3a166c2021-09-30 16:57:24 +0200310
311 @Test
312 public void testNoMoreFirstSpans () throws IOException {
313 ki = new KrillIndex();
314 ki.addDoc(createFieldDoc3());
315 ki.addDoc(createFieldDoc5());
316 ki.commit();
317
318 // c or b
319 SpanOrQuery soq = new SpanOrQuery(
320 new SpanTermQuery(new Term("tokens", "s:c")),
321 new SpanTermQuery(new Term("tokens", "s:b")));
322
323 // (c or b) /s0 d
324 SpanElementQuery e = new SpanElementQuery("tokens", "s");
325 SpanDistanceQuery sdq = new SpanDistanceQuery(
326 soq,
327 new SpanTermQuery(new Term("tokens", "s:d")),
328 new DistanceConstraint(e, 0, 0, true, false), true);
329
330 kr = ki.search(sdq, (short) 10);
331 assertEquals(1, kr.getTotalResults());
332 }
333
334 @Test
335 public void testNoMoreSecondSpans () throws IOException {
336 ki = new KrillIndex();
337 ki.addDoc(createFieldDoc3());
338 ki.addDoc(createFieldDoc5());
339 ki.commit();
340
341 // c or b
342 SpanOrQuery soq = new SpanOrQuery(
343 new SpanTermQuery(new Term("tokens", "s:c")),
344 new SpanTermQuery(new Term("tokens", "s:b")));
345
346 // d /s0(c or b)
347 SpanElementQuery e = new SpanElementQuery("tokens", "s");
348 SpanDistanceQuery sdq = new SpanDistanceQuery(
349 new SpanTermQuery(new Term("tokens", "s:d")),
350 soq,
351 new DistanceConstraint(e, 0, 0, true, false), true);
352
353 kr = ki.search(sdq, (short) 10);
354 assertEquals(0, kr.getTotalResults());
355 }
356
357 @Test
358 public void testNoElementSpans () throws IOException {
359 ki = new KrillIndex();
360 ki.addDoc(createFieldDoc3());
361 ki.addDoc(createFieldDoc5());
362 ki.commit();
363
364 // c or e
365 SpanOrQuery soq = new SpanOrQuery(
366 new SpanTermQuery(new Term("tokens", "s:c")),
367 new SpanTermQuery(new Term("tokens", "s:e")));
368
369 // (c or e) /s0 d
370 SpanElementQuery e = new SpanElementQuery("tokens", "s");
371 SpanDistanceQuery sdq = new SpanDistanceQuery(
372 soq,
373 new SpanTermQuery(new Term("tokens", "s:d")),
374 new DistanceConstraint(e, 0, 0, true, false), true);
375
376 kr = ki.search(sdq, (short) 10);
377 }
margarethac66265c2016-12-14 13:48:45 +0100378}