blob: 3fc9ea51bb9854cc8e7eb0581a68613ee7ea8fb4 [file] [log] [blame]
Eliza Margarethafb25cef2014-06-06 14:19:07 +00001package de.ids_mannheim.korap.index;
2
3import static org.junit.Assert.assertEquals;
4
5import java.io.IOException;
Eliza Margaretha997ccde2014-07-04 09:20:35 +00006import java.util.ArrayList;
7import java.util.List;
Eliza Margarethafb25cef2014-06-06 14:19:07 +00008
9import org.apache.lucene.index.Term;
10import org.apache.lucene.search.spans.SpanQuery;
11import org.apache.lucene.search.spans.SpanTermQuery;
12import org.junit.Test;
13
Nils Diewalda14ecd62015-02-26 21:00:20 +000014import de.ids_mannheim.korap.KrillIndex;
Eliza Margarethafb25cef2014-06-06 14:19:07 +000015import de.ids_mannheim.korap.query.SpanAttributeQuery;
Eliza Margarethafb25cef2014-06-06 14:19:07 +000016import de.ids_mannheim.korap.query.SpanElementQuery;
Eliza Margaretha997ccde2014-07-04 09:20:35 +000017import de.ids_mannheim.korap.query.SpanNextQuery;
Eliza Margaretha98c200e2014-10-15 13:59:58 +000018import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
Eliza Margaretha2db5e232015-03-04 10:20:01 +000019import de.ids_mannheim.korap.response.Result;
Eliza Margarethafb25cef2014-06-06 14:19:07 +000020
21public class TestAttributeIndex {
Eliza Margarethafb25cef2014-06-06 14:19:07 +000022
Nils Diewalda14ecd62015-02-26 21:00:20 +000023 private KrillIndex ki = new KrillIndex();
Nils Diewald884dbcf2015-02-27 17:02:28 +000024 private Result kr;
Eliza Margarethaafe98122015-01-23 17:37:57 +000025 private FieldDocument fd;
26
Nils Diewaldbb33da22015-03-04 16:24:25 +000027
28 public TestAttributeIndex () throws IOException {
Nils Diewalda14ecd62015-02-26 21:00:20 +000029 ki = new KrillIndex();
Eliza Margarethaafe98122015-01-23 17:37:57 +000030 }
31
Nils Diewaldbb33da22015-03-04 16:24:25 +000032
33 private FieldDocument createFieldDoc0 () {
Eliza Margarethaafe98122015-01-23 17:37:57 +000034 fd = new FieldDocument();
35 fd.addString("ID", "doc-0");
Eliza Margaretha6f989202016-10-14 21:48:29 +020036 fd.addTV("base", "bcbabd", "[(0-1)s:a|_1$<i>0<i>1|"
37 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>3|"
38 + "<>:div$<b>64<i>0<i>2<i>2<b>0<s>2|"
39 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>1|"
40 + "@:class=header$<b>17<i>3<s>1|@:class=header$<b>17<i>2<s>2]"
margaretha69726b12015-12-10 12:03:19 +010041
Eliza Margaretha6f989202016-10-14 21:48:29 +020042 + "[(1-2)s:e|_2$<i>1<i>2|"
43 + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<i>2<s>1]"
Akron42993552016-02-04 13:24:24 +010044
Eliza Margaretha6f989202016-10-14 21:48:29 +020045 + "[(2-3)s:e|_3$<i>2<i>3|"
46 + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<i>5<s>1]"
Akron42993552016-02-04 13:24:24 +010047
Eliza Margaretha6f989202016-10-14 21:48:29 +020048 + "[(3-4)s:a|_4$<i>3<i>4|"
49 + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1]"
Akron42993552016-02-04 13:24:24 +010050
Eliza Margaretha6f989202016-10-14 21:48:29 +020051 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:a$<b>64<i>4<i>5<i>5<b>0<s>2|"
52 + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|"
53 + "@:class=header$<b>17<i>5<s>2]"
Akron42993552016-02-04 13:24:24 +010054
Eliza Margaretha6f989202016-10-14 21:48:29 +020055 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>2|"
56 + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
57 + "@:class=header$<b>17<i>6<s>1]"
Akron42993552016-02-04 13:24:24 +010058
Eliza Margaretha6f989202016-10-14 21:48:29 +020059 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
60 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1"
61 + "|@:class=header$<b>17<i>7<s>1|@:class=header$<b>17<i>7<s>2]");
Eliza Margarethaafe98122015-01-23 17:37:57 +000062
63 return fd;
64 }
65
Nils Diewaldbb33da22015-03-04 16:24:25 +000066
67 private FieldDocument createFieldDoc1 () {
Eliza Margarethaafe98122015-01-23 17:37:57 +000068 fd = new FieldDocument();
69 fd.addString("ID", "doc-1");
Eliza Margaretha6f989202016-10-14 21:48:29 +020070 fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
71 + "<>:s<b>64<i>0<i>5<i>5<b>0<s>2|"
72 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>1|"
73 + "@:class=header$<b>17<i>3<s>1|@:class=title$<b>17<i>3<s>1|@:class=book$<b>17<i>3<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010074
Eliza Margaretha6f989202016-10-14 21:48:29 +020075 + "[(1-2)s:c|_2$<i>1<i>2|" + "<>:div$<b>64<i>1<i>2<i>2<b>0<s>1|"
76 + "@:class=header$<b>17<i>2<s>1|@:class=title$<b>17<i>2<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010077
Eliza Margaretha6f989202016-10-14 21:48:29 +020078 + "[(2-3)s:b|_3$<i>2<i>3|"
79 + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010080
Eliza Margaretha6f989202016-10-14 21:48:29 +020081 + "[(3-4)s:a|_4$<i>3<i>4|"
82 + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010083
Eliza Margaretha6f989202016-10-14 21:48:29 +020084 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|"
85 + "@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1|@:class=title$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010086
Eliza Margaretha6f989202016-10-14 21:48:29 +020087 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>2|"
88 + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
margaretha10da63e2015-12-18 15:42:52 +010089
Eliza Margaretha6f989202016-10-14 21:48:29 +020090 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
91 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
92 + "@:class=header$<b>17<i>7<s>1|@:class=title$<b>17<i>7<s>1]");
Eliza Margarethaafe98122015-01-23 17:37:57 +000093
94 return fd;
95 }
96
Nils Diewaldbb33da22015-03-04 16:24:25 +000097
98 private FieldDocument createFieldDoc2 () {
Eliza Margarethaafe98122015-01-23 17:37:57 +000099 fd = new FieldDocument();
100 fd.addString("ID", "doc-1");
Eliza Margaretha6f989202016-10-14 21:48:29 +0200101 fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
102 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>2|"
103 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>1|"
104 + "@:class=header$<b>17<i>3<s>2|@:class=book$<b>17<i>5<s>1|@:class=book$<b>17<i>3<s>2]"
margaretha10da63e2015-12-18 15:42:52 +0100105
Eliza Margaretha6f989202016-10-14 21:48:29 +0200106 + "[(1-2)s:e|_2$<i>1<i>2|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
107 + "<>:div$<b>64<i>1<i>2<i>2<b>0<s>1|"
108 + "@:class=book$<b>17<i>2<s>2|@:class=header$<b>17<i>2<s>1]"
margaretha10da63e2015-12-18 15:42:52 +0100109
Eliza Margaretha6f989202016-10-14 21:48:29 +0200110 + "[(2-3)s:b|_3$<i>2<i>3|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
111 + "<>:div$<b>64<i>2<i>3<i>5<b>0<s>1|"
112 + "@:class=header$<b>17<i>2<s>2|@:class=book$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +0100113
Eliza Margaretha6f989202016-10-14 21:48:29 +0200114 + "[(3-4)s:a|_4$<i>3<i>4|"
115 + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +0100116
Eliza Margaretha6f989202016-10-14 21:48:29 +0200117 + "[(4-5)s:b|_5$<i>4<i>5|"
118 + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1]"
margaretha10da63e2015-12-18 15:42:52 +0100119
Eliza Margaretha6f989202016-10-14 21:48:29 +0200120 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
121 + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
margaretha10da63e2015-12-18 15:42:52 +0100122
Eliza Margaretha6f989202016-10-14 21:48:29 +0200123 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
124 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
125 + "@:class=header$<b>17<i>7<s>1|@:class=book$<b>17<i>7<s>2]");
Eliza Margarethaafe98122015-01-23 17:37:57 +0000126
127 return fd;
128 }
129
Nils Diewaldbb33da22015-03-04 16:24:25 +0000130
Eliza Margarethaafe98122015-01-23 17:37:57 +0000131 /**
132 * Test matching elementRef
133 *
134 * @throws IOException
Eliza Margaretha6f989202016-10-14 21:48:29 +0200135 */
Eliza Margarethaafe98122015-01-23 17:37:57 +0000136 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000137 public void testCase1 () throws IOException {
Eliza Margarethaafe98122015-01-23 17:37:57 +0000138 ki.addDoc(createFieldDoc0());
139 ki.commit();
140
Eliza Margaretha6f989202016-10-14 21:48:29 +0200141 SpanAttributeQuery saq = new SpanAttributeQuery(
142 new SpanTermQuery(new Term("base", "@:class=header")), true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000143
Akron42993552016-02-04 13:24:24 +0100144 SpanElementQuery seq = new SpanElementQuery("base", "div");
margaretha69726b12015-12-10 12:03:19 +0100145
Akron42993552016-02-04 13:24:24 +0100146 // div with @class=header
147 SpanQuery sq = new SpanWithAttributeQuery(seq, saq, true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000148
149 kr = ki.search(sq, (short) 10);
150
Akron42993552016-02-04 13:24:24 +0100151 // for (int i = 0; i < kr.getTotalResults(); i++) {
152 // System.out.println(kr.getMatch(i).getLocalDocID() + " "
153 // + kr.getMatch(i).startPos + " " + kr.getMatch(i).endPos);
154 // }
155 //
156 assertEquals((long) 4, kr.getTotalResults());
157 assertEquals(0, kr.getMatch(0).getStartPos());
158 assertEquals(2, kr.getMatch(0).getEndPos());
159 assertEquals(0, kr.getMatch(1).getStartPos());
160 assertEquals(3, kr.getMatch(1).getEndPos());
161 assertEquals(3, kr.getMatch(2).getStartPos());
162 assertEquals(5, kr.getMatch(2).getEndPos());
163 assertEquals(6, kr.getMatch(3).getStartPos());
164 assertEquals(7, kr.getMatch(3).getEndPos());
Eliza Margarethaafe98122015-01-23 17:37:57 +0000165 }
166
Nils Diewaldbb33da22015-03-04 16:24:25 +0000167
Eliza Margarethaafe98122015-01-23 17:37:57 +0000168 /**
169 * Test multiple attributes and negation
170 *
171 * @throws IOException
Eliza Margaretha6f989202016-10-14 21:48:29 +0200172 */
Eliza Margarethaafe98122015-01-23 17:37:57 +0000173 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000174 public void testCase2 () throws IOException {
Eliza Margarethaafe98122015-01-23 17:37:57 +0000175 ki.addDoc(createFieldDoc1());
176 ki.commit();
177 // header and title
178 List<SpanQuery> sql = new ArrayList<>();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200179 sql.add(new SpanAttributeQuery(
180 new SpanTermQuery(new Term("base", "@:class=header")), true));
181 sql.add(new SpanAttributeQuery(
182 new SpanTermQuery(new Term("base", "@:class=title")), true));
Eliza Margarethaafe98122015-01-23 17:37:57 +0000183
Eliza Margaretha6f989202016-10-14 21:48:29 +0200184 SpanQuery sq = new SpanWithAttributeQuery(
185 new SpanElementQuery("base", "div"), sql, true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000186
187 kr = ki.search(sq, (short) 10);
188
189 assertEquals((long) 4, kr.getTotalResults());
190 assertEquals(0, kr.getMatch(0).getStartPos());
191 assertEquals(3, kr.getMatch(0).getEndPos());
192 assertEquals(1, kr.getMatch(1).getStartPos());
193 assertEquals(2, kr.getMatch(1).getEndPos());
194 assertEquals(4, kr.getMatch(2).getStartPos());
195 assertEquals(5, kr.getMatch(2).getEndPos());
196 assertEquals(6, kr.getMatch(3).getStartPos());
197 assertEquals(7, kr.getMatch(3).getEndPos());
198
199 // Add not Attribute
200 // header and title, not book
Eliza Margaretha6f989202016-10-14 21:48:29 +0200201 sql.add(new SpanAttributeQuery(
202 new SpanTermQuery(new Term("base", "@:class=book")), true,
203 true));
Eliza Margarethaafe98122015-01-23 17:37:57 +0000204
205 sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
206 sql, true);
207
208 kr = ki.search(sq, (short) 10);
209
210 assertEquals((long) 2, kr.getTotalResults());
211 assertEquals(1, kr.getMatch(0).getStartPos());
212 assertEquals(2, kr.getMatch(0).getEndPos());
213 assertEquals(6, kr.getMatch(1).getStartPos());
214 assertEquals(7, kr.getMatch(1).getEndPos());
215
216 // Test multiple negations
217 // header, not title, not book
218 sql.remove(1);
Eliza Margaretha6f989202016-10-14 21:48:29 +0200219 sql.add(new SpanAttributeQuery(
220 new SpanTermQuery(new Term("base", "@:class=title")), true,
221 true));
Eliza Margarethaafe98122015-01-23 17:37:57 +0000222
223 sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
224 sql, true);
225
226 kr = ki.search(sq, (short) 10);
227 assertEquals((long) 1, kr.getTotalResults());
228 assertEquals(5, kr.getMatch(0).getStartPos());
229 assertEquals(6, kr.getMatch(0).getEndPos());
230 }
231
Eliza Margaretha05bff462015-02-18 18:18:26 +0000232
Nils Diewaldbb33da22015-03-04 16:24:25 +0000233 /**
234 * Element with only not attributes
235 *
236 * @throws IOException
Eliza Margaretha6f989202016-10-14 21:48:29 +0200237 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000238 @Test
239 public void testcase9 () throws IOException {
Eliza Margaretha05bff462015-02-18 18:18:26 +0000240
Nils Diewaldbb33da22015-03-04 16:24:25 +0000241 ki.addDoc(createFieldDoc2());
242 ki.commit();
Eliza Margaretha05bff462015-02-18 18:18:26 +0000243
Eliza Margaretha6f989202016-10-14 21:48:29 +0200244 SpanAttributeQuery saq = new SpanAttributeQuery(
245 new SpanTermQuery(new Term("base", "@:class=book")), true,
246 true);
247 SpanQuery sq = new SpanWithAttributeQuery(
248 new SpanElementQuery("base", "div"), saq, true);
Eliza Margaretha05bff462015-02-18 18:18:26 +0000249
Nils Diewaldbb33da22015-03-04 16:24:25 +0000250 kr = ki.search(sq, (short) 10);
251 assertEquals(4, kr.getTotalResults());
252 assertEquals(1, kr.getMatch(0).getStartPos());
253 assertEquals(2, kr.getMatch(0).getEndPos());
254 assertEquals(3, kr.getMatch(1).getStartPos());
255 assertEquals(5, kr.getMatch(1).getEndPos());
256 assertEquals(5, kr.getMatch(2).getStartPos());
257 assertEquals(6, kr.getMatch(2).getEndPos());
258 assertEquals(6, kr.getMatch(3).getStartPos());
259 assertEquals(7, kr.getMatch(3).getEndPos());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000260
Nils Diewaldbb33da22015-03-04 16:24:25 +0000261 List<SpanQuery> sql = new ArrayList<>();
262 sql.add(saq);
Eliza Margaretha6f989202016-10-14 21:48:29 +0200263 sql.add(new SpanAttributeQuery(
264 new SpanTermQuery(new Term("base", "@:class=header")), true,
265 true));
Nils Diewaldbb33da22015-03-04 16:24:25 +0000266 sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
267 sql, true);
Eliza Margaretha05bff462015-02-18 18:18:26 +0000268
Nils Diewaldbb33da22015-03-04 16:24:25 +0000269 kr = ki.search(sq, (short) 10);
270 assertEquals(1, kr.getTotalResults());
271 assertEquals(3, kr.getMatch(0).getStartPos());
272 assertEquals(5, kr.getMatch(0).getEndPos());
273
margaretha69726b12015-12-10 12:03:19 +0100274
Nils Diewaldbb33da22015-03-04 16:24:25 +0000275 }
276
Eliza Margaretha05bff462015-02-18 18:18:26 +0000277
Eliza Margarethaafe98122015-01-23 17:37:57 +0000278 /**
279 * same attribute types referring to different element types
Eliza Margaretha6f989202016-10-14 21:48:29 +0200280 */
Eliza Margarethaafe98122015-01-23 17:37:57 +0000281 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000282 public void testCase3 () throws IOException {
Eliza Margarethaafe98122015-01-23 17:37:57 +0000283 ki.addDoc(createFieldDoc2());
284 ki.commit();
285
286 List<SpanQuery> sql = new ArrayList<>();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200287 sql.add(new SpanAttributeQuery(
288 new SpanTermQuery(new Term("base", "@:class=header")), true));
289 sql.add(new SpanAttributeQuery(
290 new SpanTermQuery(new Term("base", "@:class=book")), true,
291 true));
292 SpanQuery sq = new SpanWithAttributeQuery(
293 new SpanElementQuery("base", "div"), sql, true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000294
295 kr = ki.search(sq, (short) 10);
296
297 assertEquals((long) 3, kr.getTotalResults());
298 assertEquals(1, kr.getMatch(0).getStartPos());
299 assertEquals(2, kr.getMatch(0).getEndPos());
300 assertEquals(5, kr.getMatch(1).getStartPos());
301 assertEquals(6, kr.getMatch(1).getEndPos());
302 assertEquals(6, kr.getMatch(2).getStartPos());
303 assertEquals(7, kr.getMatch(2).getEndPos());
304 }
305
Nils Diewaldbb33da22015-03-04 16:24:25 +0000306
Eliza Margarethaafe98122015-01-23 17:37:57 +0000307 /** Test skipto doc for spanWithAttribute */
308 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000309 public void testCase4 () throws IOException {
Eliza Margarethaafe98122015-01-23 17:37:57 +0000310 ki.addDoc(createFieldDoc1());
311 ki.addDoc(createFieldDoc0());
312 ki.addDoc(createFieldDoc2());
313 ki.commit();
314
Eliza Margaretha6f989202016-10-14 21:48:29 +0200315 SpanAttributeQuery saq = new SpanAttributeQuery(
316 new SpanTermQuery(new Term("base", "@:class=book")), true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000317
318 List<SpanQuery> sql = new ArrayList<>();
319 sql.add(saq);
320
321 SpanWithAttributeQuery sq = new SpanWithAttributeQuery(
322 new SpanElementQuery("base", "div"), sql, true);
323
324 kr = ki.search(sq, (short) 10);
margaretha14f918d2015-12-11 11:48:07 +0100325
326 // for (int i = 0; i < kr.getTotalResults(); i++) {
327 // System.out.println(kr.getMatch(i).getLocalDocID() + " "
328 // + kr.getMatch(i).startPos + " " + kr.getMatch(i).endPos);
329 // }
330
Akron42993552016-02-04 13:24:24 +0100331 assertEquals((long) 6, kr.getTotalResults());
Eliza Margarethaafe98122015-01-23 17:37:57 +0000332
Eliza Margaretha6f989202016-10-14 21:48:29 +0200333 SpanNextQuery snq = new SpanNextQuery(
334 new SpanTermQuery(new Term("base", "s:e")), sq);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000335
336 kr = ki.search(snq, (short) 10);
337
338 assertEquals((long) 1, kr.getTotalResults());
339 assertEquals(2, kr.getMatch(0).getLocalDocID());
340 assertEquals(1, kr.getMatch(0).getStartPos());
341 assertEquals(5, kr.getMatch(0).getEndPos());
342 }
343
Nils Diewaldbb33da22015-03-04 16:24:25 +0000344
Eliza Margarethaafe98122015-01-23 17:37:57 +0000345 /**
Nils Diewaldbb33da22015-03-04 16:24:25 +0000346 * Arbitrary elements with a specific attribute.
Eliza Margaretha6f989202016-10-14 21:48:29 +0200347 */
Eliza Margarethaafe98122015-01-23 17:37:57 +0000348 @Test
Nils Diewaldbb33da22015-03-04 16:24:25 +0000349 public void testCase5 () throws IOException {
350 ki.addDoc(createFieldDoc2());
Eliza Margarethaafe98122015-01-23 17:37:57 +0000351 ki.commit();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200352 SpanAttributeQuery saq = new SpanAttributeQuery(
353 new SpanTermQuery(new Term("base", "@:class=book")), true);
Eliza Margarethaafe98122015-01-23 17:37:57 +0000354
Nils Diewaldbb33da22015-03-04 16:24:25 +0000355 SpanWithAttributeQuery swaq = new SpanWithAttributeQuery(saq, true);
356 kr = ki.search(swaq, (short) 10);
357 assertEquals(6, kr.getTotalResults());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000358
Nils Diewaldbb33da22015-03-04 16:24:25 +0000359 assertEquals(0, kr.getMatch(0).getStartPos());
360 assertEquals(3, kr.getMatch(0).getEndPos());
361 assertEquals(0, kr.getMatch(1).getStartPos());
362 assertEquals(5, kr.getMatch(1).getEndPos());
363 assertEquals(1, kr.getMatch(2).getStartPos());
364 assertEquals(2, kr.getMatch(2).getEndPos());
365 assertEquals(2, kr.getMatch(3).getStartPos());
366 assertEquals(5, kr.getMatch(3).getEndPos());
367 assertEquals(4, kr.getMatch(4).getStartPos());
368 assertEquals(5, kr.getMatch(4).getEndPos());
369 assertEquals(6, kr.getMatch(5).getStartPos());
370 assertEquals(7, kr.getMatch(5).getEndPos());
Eliza Margarethaafe98122015-01-23 17:37:57 +0000371 }
Eliza Margaretha05bff462015-02-18 18:18:26 +0000372
Eliza Margaretha05bff462015-02-18 18:18:26 +0000373
Nils Diewaldbb33da22015-03-04 16:24:25 +0000374 /**
375 * Arbitrary elements with multiple attributes.
Eliza Margaretha6f989202016-10-14 21:48:29 +0200376 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000377 @Test
378 public void testCase6 () throws IOException {
379 ki.addDoc(createFieldDoc2());
380 ki.commit();
Eliza Margaretha05bff462015-02-18 18:18:26 +0000381
Nils Diewaldbb33da22015-03-04 16:24:25 +0000382 List<SpanQuery> sql = new ArrayList<>();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200383 sql.add(new SpanAttributeQuery(
384 new SpanTermQuery(new Term("base", "@:class=header")), true));
385 sql.add(new SpanAttributeQuery(
386 new SpanTermQuery(new Term("base", "@:class=book")), true));
Eliza Margaretha05bff462015-02-18 18:18:26 +0000387
Nils Diewaldbb33da22015-03-04 16:24:25 +0000388 SpanWithAttributeQuery swaq = new SpanWithAttributeQuery(sql, true);
389 kr = ki.search(swaq, (short) 10);
390 assertEquals(2, kr.getTotalResults());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000391
Nils Diewaldbb33da22015-03-04 16:24:25 +0000392 assertEquals(0, kr.getMatch(0).getStartPos());
393 assertEquals(3, kr.getMatch(0).getEndPos());
394 assertEquals(4, kr.getMatch(1).getStartPos());
395 assertEquals(5, kr.getMatch(1).getEndPos());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000396
Nils Diewaldbb33da22015-03-04 16:24:25 +0000397 }
Eliza Margaretha05bff462015-02-18 18:18:26 +0000398
Eliza Margaretha05bff462015-02-18 18:18:26 +0000399
Nils Diewaldbb33da22015-03-04 16:24:25 +0000400 /**
401 * Arbitrary elements with an attribute and a not attribute.
Eliza Margaretha6f989202016-10-14 21:48:29 +0200402 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000403 @Test
404 public void testCase7 () throws IOException {
405 ki.addDoc(createFieldDoc2());
406 ki.commit();
Eliza Margaretha05bff462015-02-18 18:18:26 +0000407
Nils Diewaldbb33da22015-03-04 16:24:25 +0000408 List<SpanQuery> sql = new ArrayList<>();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200409 sql.add(new SpanAttributeQuery(
410 new SpanTermQuery(new Term("base", "@:class=header")), true,
411 true));
412 sql.add(new SpanAttributeQuery(
413 new SpanTermQuery(new Term("base", "@:class=book")), true));
Eliza Margaretha05bff462015-02-18 18:18:26 +0000414
Nils Diewaldbb33da22015-03-04 16:24:25 +0000415 SpanWithAttributeQuery swaq = new SpanWithAttributeQuery(sql, true);
416 kr = ki.search(swaq, (short) 10);
417 assertEquals(4, kr.getTotalResults());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000418
Nils Diewaldbb33da22015-03-04 16:24:25 +0000419 assertEquals(0, kr.getMatch(0).getStartPos());
420 assertEquals(5, kr.getMatch(0).getEndPos());
421 assertEquals(1, kr.getMatch(1).getStartPos());
422 assertEquals(2, kr.getMatch(1).getEndPos());
423 assertEquals(2, kr.getMatch(2).getStartPos());
424 assertEquals(5, kr.getMatch(2).getEndPos());
425 assertEquals(6, kr.getMatch(3).getStartPos());
426 assertEquals(7, kr.getMatch(3).getEndPos());
Eliza Margaretha05bff462015-02-18 18:18:26 +0000427
Nils Diewaldbb33da22015-03-04 16:24:25 +0000428 // for (int i = 0; i < kr.getTotalResults(); i++) {
429 // System.out.println(kr.getMatch(i).getLocalDocID() + " "
430 // + kr.getMatch(i).startPos + " " + kr.getMatch(i).endPos);
431 // }
432 }
Eliza Margaretha05bff462015-02-18 18:18:26 +0000433
Nils Diewaldbb33da22015-03-04 16:24:25 +0000434
435 /**
436 * Arbitrary elements with only not attributes.
Eliza Margaretha6f989202016-10-14 21:48:29 +0200437 */
Nils Diewaldbb33da22015-03-04 16:24:25 +0000438 @Test(expected = IllegalArgumentException.class)
439 public void testCase8 () throws IOException {
440 ki.addDoc(createFieldDoc2());
441 ki.commit();
442
443 List<SpanQuery> sql = new ArrayList<>();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200444 sql.add(new SpanAttributeQuery(
445 new SpanTermQuery(new Term("base", "@:class=header")), true,
446 true));
447 sql.add(new SpanAttributeQuery(
448 new SpanTermQuery(new Term("base", "@:class=book")), true,
449 true));
Nils Diewaldbb33da22015-03-04 16:24:25 +0000450
451 SpanWithAttributeQuery swaq = new SpanWithAttributeQuery(sql, true);
452 kr = ki.search(swaq, (short) 10);
453 }
Eliza Margaretha05bff462015-02-18 18:18:26 +0000454
Eliza Margarethafb25cef2014-06-06 14:19:07 +0000455}