blob: 8fd54f02e6a9fa46cf14892810b31e5d7088f0dc [file] [log] [blame]
Eliza Margaretha01929182014-02-19 11:48:59 +00001package de.ids_mannheim.korap.index;
2
Nils Diewaldf399a672013-11-18 17:55:22 +00003import java.util.*;
4import java.io.*;
5
6import org.apache.lucene.util.Version;
7import org.apache.lucene.util.BytesRef;
8import org.apache.lucene.util.Bits;
9
10import static org.junit.Assert.*;
11import org.junit.Test;
12import org.junit.Ignore;
13import org.junit.runner.RunWith;
14import org.junit.runners.JUnit4;
15
Nils Diewalda14ecd62015-02-26 21:00:20 +000016import de.ids_mannheim.korap.KrillIndex;
Nils Diewald0339d462015-02-26 14:53:56 +000017import de.ids_mannheim.korap.KrillQuery;
Akron74748c62016-06-29 00:22:43 +020018import de.ids_mannheim.korap.query.QueryBuilder;
Nils Diewaldf399a672013-11-18 17:55:22 +000019import de.ids_mannheim.korap.index.FieldDocument;
Nils Diewalde4986d72015-02-27 17:35:00 +000020import de.ids_mannheim.korap.index.MultiTermTokenStream;
Akron74748c62016-06-29 00:22:43 +020021import de.ids_mannheim.korap.response.Result;
22import de.ids_mannheim.korap.util.QueryException;
Akron9e46d712021-12-09 15:43:22 +010023import de.ids_mannheim.korap.collection.CollectionBuilder;
24import de.ids_mannheim.korap.KrillCollection;
Nils Diewaldf399a672013-11-18 17:55:22 +000025
Akronc74dee02018-02-07 18:48:30 +010026import com.fasterxml.jackson.databind.ObjectMapper;
27import com.fasterxml.jackson.databind.JsonNode;
28
Nils Diewaldf399a672013-11-18 17:55:22 +000029@RunWith(JUnit4.class)
Nils Diewalda14ecd62015-02-26 21:00:20 +000030public class TestKrillIndex {
Nils Diewaldf399a672013-11-18 17:55:22 +000031
Akron8798be82016-06-23 23:10:25 +020032
33 /*
34 * Todo: Currently fields can only be set if they are
35 * part of the general field set.
36 * this will change soon!
37 */
38
Nils Diewaldf399a672013-11-18 17:55:22 +000039 @Test
40 public void indexExample () throws IOException {
Nils Diewalda14ecd62015-02-26 21:00:20 +000041 KrillIndex ki = new KrillIndex();
margaretha89a358d2019-03-18 15:03:52 +010042 assertEquals(ki.isReaderOpen(), false);
Nils Diewaldf399a672013-11-18 17:55:22 +000043
Nils Diewald5c375702015-02-09 20:58:24 +000044 assertEquals(0, ki.numberOf("base", "documents"));
45 assertEquals(0, ki.numberOf("base", "tokens"));
46 assertEquals(0, ki.numberOf("base", "sentences"));
47 assertEquals(0, ki.numberOf("base", "paragraphs"));
Nils Diewald019e3972014-09-29 19:18:26 +000048
Nils Diewald5c375702015-02-09 20:58:24 +000049 FieldDocument fd = new FieldDocument();
Nils Diewaldf399a672013-11-18 17:55:22 +000050
Nils Diewald5c375702015-02-09 20:58:24 +000051 fd.addString("name", "Peter");
52 fd.addInt("zahl1", 56);
53 fd.addInt("zahl2", "58");
Akron8798be82016-06-23 23:10:25 +020054 fd.addInt("zahl3", "059");
55 fd.addInt("UID", 1);
Nils Diewald5c375702015-02-09 20:58:24 +000056 fd.addText("teaser", "Das ist der Name der Rose");
Eliza Margaretha6f989202016-10-14 21:48:29 +020057 fd.addTV("base", "ich bau", "[(0-3)s:ich|l:ich|p:PPER|-:sentences$<i>2]"
58 + "[(4-7)s:bau|l:bauen|p:VVFIN]");
Nils Diewald5c375702015-02-09 20:58:24 +000059 ki.addDoc(fd);
Nils Diewaldf399a672013-11-18 17:55:22 +000060
Nils Diewald5c375702015-02-09 20:58:24 +000061 fd = new FieldDocument();
Nils Diewaldf399a672013-11-18 17:55:22 +000062
Nils Diewald5c375702015-02-09 20:58:24 +000063 fd.addString("name", "Hans");
64 fd.addInt("zahl1", 14);
65 fd.addText("teaser", "Das Sein");
Akron8798be82016-06-23 23:10:25 +020066 fd.addInt("UID", 2);
Nils Diewaldf399a672013-11-18 17:55:22 +000067
Nils Diewald5c375702015-02-09 20:58:24 +000068 MultiTermTokenStream mtts = fd.newMultiTermTokenStream();
69 mtts.addMultiTermToken("s:wir#0-3", "l:wir", "p:PPER");
70 mtts.addMultiTermToken("s:sind#4-8", "l:sein", "p:VVFIN");
71 mtts.addMeta("sentences", (int) 5);
72 fd.addTV("base", "wir sind", mtts);
Nils Diewaldbb33da22015-03-04 16:24:25 +000073
Nils Diewald5c375702015-02-09 20:58:24 +000074 ki.addDoc(fd);
Nils Diewaldf399a672013-11-18 17:55:22 +000075
Nils Diewald5c375702015-02-09 20:58:24 +000076 /* Save documents */
77 ki.commit();
Nils Diewaldf399a672013-11-18 17:55:22 +000078
margaretha89a358d2019-03-18 15:03:52 +010079 assertEquals(ki.isReaderOpen(), false);
Nils Diewald5c375702015-02-09 20:58:24 +000080 assertEquals(2, ki.numberOf("base", "documents"));
81 assertEquals(7, ki.numberOf("base", "sentences"));
margaretha89a358d2019-03-18 15:03:52 +010082 assertEquals(ki.isReaderOpen(), true);
Nils Diewaldf399a672013-11-18 17:55:22 +000083
Nils Diewald5c375702015-02-09 20:58:24 +000084 fd = new FieldDocument();
Nils Diewaldf399a672013-11-18 17:55:22 +000085
Nils Diewald5c375702015-02-09 20:58:24 +000086 fd.addString("name", "Frank");
87 fd.addInt("zahl1", 59);
88 fd.addInt("zahl2", 65);
Akron8798be82016-06-23 23:10:25 +020089 fd.addInt("UID", 3);
Nils Diewald5c375702015-02-09 20:58:24 +000090 fd.addText("teaser", "Noch ein Versuch");
Nils Diewaldbb33da22015-03-04 16:24:25 +000091 fd.addTV("base", "ich bau", "[(0-3)s:der|l:der|p:DET|-:sentences$<i>3]"
92 + "[(4-8)s:baum|l:baum|p:NN]");
Nils Diewald5c375702015-02-09 20:58:24 +000093 ki.addDoc(fd);
Nils Diewaldf399a672013-11-18 17:55:22 +000094
margaretha89a358d2019-03-18 15:03:52 +010095
Nils Diewald5c375702015-02-09 20:58:24 +000096 /* Save documents */
97 ki.commit();
Nils Diewaldf399a672013-11-18 17:55:22 +000098
Nils Diewald5c375702015-02-09 20:58:24 +000099 assertEquals(3, ki.numberOf("base", "documents"));
100 assertEquals(10, ki.numberOf("base", "sentences"));
Nils Diewaldf399a672013-11-18 17:55:22 +0000101
Nils Diewald0339d462015-02-26 14:53:56 +0000102 // KrillQuery kq = new KrillQuery("text");
Nils Diewald5c375702015-02-09 20:58:24 +0000103 // ki.search();
Akron8798be82016-06-23 23:10:25 +0200104
105 ki.getDoc("1");
Nils Diewaldf399a672013-11-18 17:55:22 +0000106 };
Nils Diewaldc82379b2014-10-02 14:58:18 +0000107
Nils Diewaldbb33da22015-03-04 16:24:25 +0000108
Nils Diewaldc82379b2014-10-02 14:58:18 +0000109 @Test
110 public void indexAlteration () throws IOException {
Nils Diewalda14ecd62015-02-26 21:00:20 +0000111 KrillIndex ki = new KrillIndex();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000112
Nils Diewald5c375702015-02-09 20:58:24 +0000113 assertEquals(0, ki.numberOf("base", "documents"));
Nils Diewaldc82379b2014-10-02 14:58:18 +0000114
Nils Diewald5c375702015-02-09 20:58:24 +0000115 FieldDocument fd = new FieldDocument();
116 fd.addString("name", "Peter");
117 ki.addDoc(fd);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000118
Nils Diewald5c375702015-02-09 20:58:24 +0000119 assertEquals(0, ki.numberOf("base", "documents"));
Nils Diewaldc82379b2014-10-02 14:58:18 +0000120
Nils Diewald5c375702015-02-09 20:58:24 +0000121 fd = new FieldDocument();
122 fd.addString("name", "Michael");
123 ki.addDoc(fd);
Nils Diewaldc82379b2014-10-02 14:58:18 +0000124
Nils Diewald5c375702015-02-09 20:58:24 +0000125 assertEquals(0, ki.numberOf("base", "documents"));
Nils Diewaldc82379b2014-10-02 14:58:18 +0000126
Nils Diewald5c375702015-02-09 20:58:24 +0000127 ki.commit();
Nils Diewaldc82379b2014-10-02 14:58:18 +0000128
Nils Diewald5c375702015-02-09 20:58:24 +0000129 assertEquals(2, ki.numberOf("base", "documents"));
Nils Diewaldc82379b2014-10-02 14:58:18 +0000130
Nils Diewald5c375702015-02-09 20:58:24 +0000131 // hasDeletions, hasPendingMerges
Nils Diewaldc82379b2014-10-02 14:58:18 +0000132 };
Akron75ee2b82016-06-20 21:20:34 +0200133
Akron08f4ceb2016-08-03 23:53:32 +0200134
Akron74748c62016-06-29 00:22:43 +0200135 /*
136 * This test demonstrates the behaviour
137 */
138 @Test
139 public void indexUnicode () throws IOException, QueryException {
140 KrillIndex ki = new KrillIndex();
141
142 FieldDocument fd = new FieldDocument();
143 fd.addString("name", "Peter");
144
145 // These values are canonically equivalent
146 // But indexed as byte sequences
Eliza Margaretha6f989202016-10-14 21:48:29 +0200147 fd.addTV("base",
148 new String("ju" + "\u006E" + "\u0303" + "o") + " "
149 + new String("ju" + "\u00F1" + "o"),
150 "[(0-5)s:ju" + "\u006E" + "\u0303" + "o|_0$<i>0<i>5|-:t$<i>2]"
151 + "[(6-10)s:ju" + "\u00F1" + "o|_1$<i>6<i>10]");
Akron74748c62016-06-29 00:22:43 +0200152 ki.addDoc(fd);
153 ki.commit();
154
155 assertEquals(1, ki.numberOf("base", "documents"));
156
157 QueryBuilder kq = new QueryBuilder("base");
158 Result kr = ki.search(kq.seg("s:ju" + "\u00F1" + "o").toQuery());
159 assertEquals(1, kr.getTotalResults());
160
161 kr = ki.search(kq.seg("s:ju" + "\u006E" + "\u0303" + "o").toQuery());
162 assertEquals(1, kr.getTotalResults());
163 };
164
Akron08f4ceb2016-08-03 23:53:32 +0200165
Akron75ee2b82016-06-20 21:20:34 +0200166 @Test
167 public void indexFieldInfo () throws IOException {
168 KrillIndex ki = new KrillIndex();
169
170 FieldDocument fd = new FieldDocument();
Akron74107462019-01-10 11:32:54 +0100171 fd.addText("title", "Peter");
Akron75ee2b82016-06-20 21:20:34 +0200172 fd.setUID(22);
173 ki.addDoc(fd);
Akron8798be82016-06-23 23:10:25 +0200174
175 fd = new FieldDocument();
Akron74107462019-01-10 11:32:54 +0100176 fd.addText("title", "Akron");
Akron8798be82016-06-23 23:10:25 +0200177 fd.setUID("05678");
178 ki.addDoc(fd);
179
Akron75ee2b82016-06-20 21:20:34 +0200180 ki.commit();
181
Akron8798be82016-06-23 23:10:25 +0200182 assertEquals(2, ki.numberOf("base", "documents"));
Akron75ee2b82016-06-20 21:20:34 +0200183
Akron32b95192019-01-11 13:58:55 +0100184 assertEquals("Peter", ki.getDoc("22").getFieldValue("title"));
Akron75ee2b82016-06-20 21:20:34 +0200185 assertEquals(22, ki.getDoc("22").getUID());
Akron8798be82016-06-23 23:10:25 +0200186
Akron32b95192019-01-11 13:58:55 +0100187 assertEquals("Akron", ki.getDoc("5678").getFieldValue("title"));
Akron8798be82016-06-23 23:10:25 +0200188 assertEquals(5678, ki.getDoc("5678").getUID());
189
Akron32b95192019-01-11 13:58:55 +0100190 assertEquals("Akron", ki.getDoc("05678").getFieldValue("title"));
Akron8798be82016-06-23 23:10:25 +0200191 assertEquals(5678, ki.getDoc("05678").getUID());
Akron75ee2b82016-06-20 21:20:34 +0200192 };
Akronc74dee02018-02-07 18:48:30 +0100193
194
Akron70ce0c02018-05-25 23:44:26 +0200195 @Test
Akronc74dee02018-02-07 18:48:30 +0100196 public void indexRetrieveFieldInfo () throws IOException {
197 KrillIndex ki = new KrillIndex();
198
199 FieldDocument fd = new FieldDocument();
200
201 fd.addString("name", "Peter");
202 fd.addString("textSigle", "a/b/c");
203 fd.addInt("zahl1", 56);
204 fd.addStored("ref", "My reference");
Akron8bb3bc32018-12-12 19:34:56 +0100205 fd.addAttachement("ref2", "data:text/plain;charset=UTF-8,My reference2");
Akronc74dee02018-02-07 18:48:30 +0100206
Akrona6dabb72019-01-09 13:09:41 +0100207 fd.addKeywords("keyword", "baum");
208 fd.addKeywords("keyword", "wald");
Akron4376e742019-01-16 15:02:30 +0100209
Akronde4f0852019-01-16 16:29:44 +0100210 fd.addKeywords("keyword", "garten laube");
Akronc74dee02018-02-07 18:48:30 +0100211
212 fd.addText("title", "Der Name der Rose");
213
214 ki.addDoc(fd);
215
216 /* Save documents */
217 ki.commit();
218
219 JsonNode res = ki.getFields("a/b/c").toJsonNode();
220
221 // TODO: Check if the sorting is always identical!
222
Akron7cba5de2018-02-09 18:49:34 +0100223 Iterator fieldIter = res.at("/document/fields").elements();
Akronc74dee02018-02-07 18:48:30 +0100224
Akron7cba5de2018-02-09 18:49:34 +0100225 int checkC = 0;
226 while (fieldIter.hasNext()) {
227 JsonNode field = (JsonNode) fieldIter.next();
Akronc74dee02018-02-07 18:48:30 +0100228
Akron7cba5de2018-02-09 18:49:34 +0100229 String key = field.at("/key").asText();
Akronc74dee02018-02-07 18:48:30 +0100230
Akron7cba5de2018-02-09 18:49:34 +0100231 switch (key) {
232 case "ref":
233 assertEquals("type:store", field.at("/type").asText());
234 assertEquals("koral:field", field.at("/@type").asText());
235 assertEquals("My reference", field.at("/value").asText());
236 checkC++;
237 break;
Akronc74dee02018-02-07 18:48:30 +0100238
Akron8bb3bc32018-12-12 19:34:56 +0100239 case "ref2":
240 assertEquals("type:attachement", field.at("/type").asText());
241 assertEquals("koral:field", field.at("/@type").asText());
242 assertEquals("data:text/plain;charset=UTF-8,My reference2", field.at("/value").asText());
243 checkC++;
244 break;
245
Akron7cba5de2018-02-09 18:49:34 +0100246 case "title":
247 assertEquals("type:text", field.at("/type").asText());
248 assertEquals("koral:field", field.at("/@type").asText());
249 assertEquals("Der Name der Rose", field.at("/value").asText());
250 checkC++;
251 break;
Akronc74dee02018-02-07 18:48:30 +0100252
Akron7cba5de2018-02-09 18:49:34 +0100253 case "textSigle":
254 assertEquals("type:string", field.at("/type").asText());
255 assertEquals("koral:field", field.at("/@type").asText());
256 assertEquals("a/b/c", field.at("/value").asText());
257 checkC++;
258 break;
259
260 case "keyword":
Akron04f00952018-03-06 18:56:54 +0100261 assertEquals("type:keywords", field.at("/type").asText());
Akron7cba5de2018-02-09 18:49:34 +0100262 assertEquals("koral:field", field.at("/@type").asText());
263 assertEquals("baum", field.at("/value/0").asText());
264 assertEquals("wald", field.at("/value/1").asText());
Akronde4f0852019-01-16 16:29:44 +0100265 assertEquals("garten", field.at("/value/2").asText());
266 assertEquals("laube", field.at("/value/3").asText());
Akron7cba5de2018-02-09 18:49:34 +0100267 checkC++;
268 break;
269
270 case "zahl1":
Akrone64cc162019-01-08 18:40:37 +0100271 assertEquals("type:integer", field.at("/type").asText());
Akron7cba5de2018-02-09 18:49:34 +0100272 assertEquals("koral:field", field.at("/@type").asText());
273 assertEquals(56, field.at("/value").asInt());
274 checkC++;
275 break;
276
277 case "name":
278 assertEquals("type:string", field.at("/type").asText());
279 assertEquals("koral:field", field.at("/@type").asText());
280 assertEquals("Peter", field.at("/value").asText());
281 checkC++;
282 break;
283 };
284 };
285
Akron8bb3bc32018-12-12 19:34:56 +0100286 assertEquals(7, checkC);
Akronc74dee02018-02-07 18:48:30 +0100287
Akron4497aba2018-02-08 19:03:09 +0100288
289 // Test with real document
290 ki.addDoc(getClass().getResourceAsStream("/wiki/wdd17-982-72848.json.gz"),true);
291
292 /* Save documents */
293 ki.commit();
294
Akron7cba5de2018-02-09 18:49:34 +0100295 res = ki.getFields("wdd17/982/72841").toJsonNode();
Akron4497aba2018-02-08 19:03:09 +0100296 assertEquals("Document not found", res.at("/errors/0/1").asText());
297
Akron7cba5de2018-02-09 18:49:34 +0100298 res = ki.getFields("WDD17/982/72848").toJsonNode();
Akron4497aba2018-02-08 19:03:09 +0100299
Akron7cba5de2018-02-09 18:49:34 +0100300 fieldIter = res.at("/document/fields").elements();
Akron4497aba2018-02-08 19:03:09 +0100301
Akron7cba5de2018-02-09 18:49:34 +0100302 checkC = 0;
303 while (fieldIter.hasNext()) {
304 JsonNode field = (JsonNode) fieldIter.next();
Akron4497aba2018-02-08 19:03:09 +0100305
Akron7cba5de2018-02-09 18:49:34 +0100306 String key = field.at("/key").asText();
307
308 switch (key) {
309 case "pubDate":
310
Akron0c8a5c52018-03-07 20:00:36 +0100311 assertEquals("type:date", field.at("/type").asText());
312 assertEquals("2017-07-01", field.at("/value").asText());
Akron7cba5de2018-02-09 18:49:34 +0100313 break;
314
315 case "textSigle":
316
317 assertEquals("type:string", field.at("/type").asText());
318 assertEquals("WDD17/982/72848", field.at("/value").asText());
319 break;
320
321 case "foundries":
Akron04f00952018-03-06 18:56:54 +0100322 assertEquals("type:keywords", field.at("/type").asText());
323 assertEquals("dereko", field.at("/value/0").asText());
324 assertEquals("dereko/structure", field.at("/value/1").asText());
325 assertEquals("dereko/structure/base-sentences-paragraphs-pagebreaks", field.at("/value/2").asText());
Akron7cba5de2018-02-09 18:49:34 +0100326 break;
327 };
328 };
Akronc74dee02018-02-07 18:48:30 +0100329 };
Akron672ac5d2019-08-29 12:39:59 +0200330
331 @Test
332 public void indexRetrieveFieldInfoUpsert () throws IOException {
333 KrillIndex ki = new KrillIndex();
334
335 FieldDocument fd = new FieldDocument();
336 fd.addString("name", "Peter");
337 fd.addString("textSigle", "a/b/c");
338 ki.upsertDoc(fd);
339
340 /* Save documents */
341 ki.commit();
342
343 fd = new FieldDocument();
344 fd.addString("name", "Frank");
345 fd.addString("textSigle", "a/b/d");
346 ki.upsertDoc(fd);
347
348 /* Save documents */
349 ki.commit();
350
351 fd = new FieldDocument();
352 fd.addString("name", "Franz");
353 fd.addString("textSigle", "a/b/c");
354 ki.upsertDoc(fd);
355
356 /* Save documents */
357 ki.commit();
358 JsonNode res = ki.getFields("a/b/c").toJsonNode();
359 Iterator fieldIter = res.at("/document/fields").elements();
360
361 int checkC = 0;
362 while (fieldIter.hasNext()) {
363 JsonNode field = (JsonNode) fieldIter.next();
364
365 String key = field.at("/key").asText();
366
367 switch (key) {
368 case "name":
369 assertEquals("type:string", field.at("/type").asText());
370 assertEquals("koral:field", field.at("/@type").asText());
371 assertEquals("Franz", field.at("/value").asText());
372 checkC++;
373 break;
374 }
375 }
376
377 assertEquals(1, checkC);
378
379 }
Akron9e46d712021-12-09 15:43:22 +0100380
381 @Test
382 public void indexFieldVector () throws IOException {
383 KrillIndex ki = new KrillIndex();
384
385 FieldDocument fd = new FieldDocument();
386 fd.addString("textSigle", "aaaa");
387 ki.addDoc(fd);
388
389 fd = new FieldDocument();
390 fd.addString("textSigle", "bbbb");
391 fd.setUID("05678");
392 ki.addDoc(fd);
393
394 ki.commit();
395
396 CollectionBuilder cb = new CollectionBuilder();
397 KrillCollection kcn = new KrillCollection(ki);
398
399 List fieldValues = ki.getFieldVector("textSigle", kcn);
400 assertEquals(2, fieldValues.size());
401 assertEquals("aaaa", fieldValues.get(0));
402 assertEquals("bbbb", fieldValues.get(1));
403
404 fieldValues = ki.getFieldVector("UID", kcn);
405 assertEquals(1, fieldValues.size(), 1);
406 assertEquals("5678", fieldValues.get(0));
407
408 kcn.fromBuilder(cb.term("textSigle","bbbb"));
409 fieldValues = ki.getFieldVector("textSigle", kcn);
410 assertEquals(1, fieldValues.size());
411 assertEquals("bbbb", fieldValues.get(0));
412
413
414 fd = new FieldDocument();
415 fd.addString("textSigle", "cccc");
416 ki.addDoc(fd);
417
418 ki.commit();
419
420 kcn.fromBuilder(null);
421 fieldValues = ki.getFieldVector("textSigle", kcn);
422 assertEquals(3, fieldValues.size());
423 assertEquals("aaaa", fieldValues.get(0));
424 assertEquals("bbbb", fieldValues.get(1));
425 assertEquals("cccc", fieldValues.get(2));
426
427 kcn.fromBuilder(cb.orGroup().with(cb.term("textSigle","aaaa")).with(cb.term("textSigle","cccc")));
428 fieldValues = ki.getFieldVector("textSigle", kcn);
429 assertEquals(2, fieldValues.size());
430 assertEquals("aaaa", fieldValues.get(0));
431 assertEquals("cccc", fieldValues.get(1));
432 };
Akron68b5de22022-02-02 12:23:17 +0100433
434 @Test
435 public void indexFieldVectorReal () throws IOException {
436 KrillIndex ki = new KrillIndex();
437
438 // Test with real document
439 ki.addDoc(getClass().getResourceAsStream("/wiki/wdd17-982-72848.json.gz"),true);
440
441 ki.commit();
442
443 CollectionBuilder cb = new CollectionBuilder();
444 KrillCollection kcn = new KrillCollection(ki);
445
446 List fieldValues = ki.getFieldVector("textSigle", kcn);
447 assertEquals(1, fieldValues.size());
448 assertEquals("WDD17/982/72848", fieldValues.get(0));
449
450 fieldValues = ki.getFieldVector("author", kcn);
451 assertEquals(1, fieldValues.size());
452 assertEquals("ArchivBot, u.a.", fieldValues.get(0));
453
454 fieldValues = ki.getFieldVector("base", kcn);
455 assertEquals(0, fieldValues.size());
456
457 fieldValues = ki.getFieldVector("tokens", kcn);
458 assertEquals(0, fieldValues.size());
459 };
Nils Diewaldf399a672013-11-18 17:55:22 +0000460};