blob: 78d623ca47be62e6525647142a1f97ff5ffc9ff8 [file] [log] [blame]
package de.ids_mannheim.korap.index;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.SpanTermQuery;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import de.ids_mannheim.korap.KrillIndex;
import de.ids_mannheim.korap.KrillQuery;
import de.ids_mannheim.korap.query.SpanClassQuery;
import de.ids_mannheim.korap.query.SpanElementQuery;
import de.ids_mannheim.korap.query.SpanNextQuery;
import de.ids_mannheim.korap.query.SpanWithinQuery;
import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
import de.ids_mannheim.korap.response.Result;
import de.ids_mannheim.korap.util.QueryException;
// mvn -Dtest=TestWithinIndex#indexExample1 test
/**
* @author diewald
* @author margaretha
*/
@RunWith(JUnit4.class)
public class TestWithinIndex {
// Todo: primary data as a non-indexed field separated.
@Test
public void indexExample1a () throws IOException {
KrillIndex ki = new KrillIndex();
// <a>x<a>y<a>zhij</a>hij</a>hij</a>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "x y z h i j h i j h i j ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:h]" + // 4
"[(12-15)s:i]" + // 5
"[(15-18)s:j]" + // 6
"[(18-21)s:h]" + // 7
"[(21-24)s:i]" + // 8
"[(24-27)s:j]" + // 9
"[(27-30)s:h]" + // 10
"[(30-33)s:i]" + // 11
"[(33-36)s:j]"); // 12
ki.addDoc(fd);
ki.commit();
SpanQuery sq;
Result kr;
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 6);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals(1, ki.numberOf("documents"));
};
@Test
public void indexExample1b () throws IOException {
// Cases 9, 12, 13
KrillIndex ki = new KrillIndex();
// <a>x<a>y<a>zhij</a>hij</a>hij</a>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "x y z h i j h i j h i j ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:h]" + // 4
"[(12-15)s:i]" + // 5
"[(15-18)s:j]" + // 6
"[(18-21)s:h]" + // 7
"[(21-24)s:i]" + // 8
"[(24-27)s:j]" + // 9
"[(27-30)s:h]" + // 10
"[(30-33)s:i]" + // 11
"[(33-36)s:j]"); // 12
ki.addDoc(fd);
// <a>x<a>y<a>zhij</a>hij</a>hij</a>
fd = new FieldDocument();
fd.addTV("base", "x y z h i j h i j h i j ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:h]" + // 4
"[(12-15)s:i]" + // 5
"[(15-18)s:j]" + // 6
"[(18-21)s:h]" + // 7
"[(21-24)s:i]" + // 8
"[(24-27)s:j]" + // 9
"[(27-30)s:h]" + // 10
"[(30-33)s:i]" + // 11
"[(33-36)s:j]"); // 12
ki.addDoc(fd);
// Save documents
ki.commit();
SpanQuery sq;
Result kr;
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 12);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 12, kr.getMatch(6).endPos);
assertEquals("Doc (6)", 1, kr.getMatch(6).internalDocID);
assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 12, kr.getMatch(7).endPos);
assertEquals("Doc (7)", 1, kr.getMatch(7).internalDocID);
assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 12, kr.getMatch(8).endPos);
assertEquals("Doc (8)", 1, kr.getMatch(8).internalDocID);
assertEquals("StartPos (9)", 1, kr.getMatch(9).startPos);
assertEquals("EndPos (9)", 9, kr.getMatch(9).endPos);
assertEquals("Doc (9)", 1, kr.getMatch(9).internalDocID);
assertEquals("StartPos (10)", 1, kr.getMatch(10).startPos);
assertEquals("EndPos (10)", 9, kr.getMatch(10).endPos);
assertEquals("Doc (10)", 1, kr.getMatch(10).internalDocID);
assertEquals("StartPos (11)", 2, kr.getMatch(11).startPos);
assertEquals("EndPos (11)", 6, kr.getMatch(11).endPos);
assertEquals("Doc (11)", 1, kr.getMatch(11).internalDocID);
/*
for (Match km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
};
*/
assertEquals(2, ki.numberOf("documents"));
};
@Test
public void indexExample1c () throws IOException {
// Cases 9, 12, 13
KrillIndex ki = new KrillIndex();
// <a>x<a>y<a>zhij</a>hij</a>hij</a>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "x y z h i j h i j h i j ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:h]" + // 4
"[(12-15)s:i]" + // 5
"[(15-18)s:j]" + // 6
"[(18-21)s:h]" + // 7
"[(21-24)s:i]" + // 8
"[(24-27)s:j]" + // 9
"[(27-30)s:h]" + // 10
"[(30-33)s:i]" + // 11
"[(33-36)s:j]"); // 12
ki.addDoc(fd);
// <a>x<a>y<a>zabc</a>abc</a>abc</a>
fd = new FieldDocument();
fd.addTV("base", "x y z a b c a b c a b c ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:a]" + // 4
"[(12-15)s:b]" + // 5
"[(15-18)s:c]" + // 6
"[(18-21)s:a]" + // 7
"[(21-24)s:b]" + // 8
"[(24-27)s:c]" + // 9
"[(27-30)s:a]" + // 10
"[(30-33)s:b]" + // 11
"[(33-36)s:c]"); // 12
ki.addDoc(fd);
// Save documents
ki.commit();
SpanQuery sq;
Result kr;
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 6);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
assertEquals(2, ki.numberOf("documents"));
};
@Test
public void indexExample1d () throws IOException {
// Cases 9, 12, 13
KrillIndex ki = new KrillIndex();
// <a>x<a>y<a>zhij</a>hij</a>hij</a>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "x y z h i j h i j h i j ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:h]" + // 4
"[(12-15)s:i]" + // 5
"[(15-18)s:j]" + // 6
"[(18-21)s:h]" + // 7
"[(21-24)s:i]" + // 8
"[(24-27)s:j]" + // 9
"[(27-30)s:h]" + // 10
"[(30-33)s:i]" + // 11
"[(33-36)s:j]"); // 12
ki.addDoc(fd);
fd = new FieldDocument();
fd.addTV("base", "x y z h ", "[(0-3)s:x]" + // 1
"[(3-6)s:y]" + // 2
"[(6-9)s:z]" + // 3
"[(9-12)s:h]"); // 4
ki.addDoc(fd);
// <a>x<a>y<a>zabc</a>abc</a>abc</a>
fd = new FieldDocument();
fd.addTV("base", "x y z a b c a b c a b c ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0]" + // 1
"[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]" + // 2
"[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]" + // 3
"[(9-12)s:a]" + // 4
"[(12-15)s:b]" + // 5
"[(15-18)s:c]" + // 6
"[(18-21)s:a]" + // 7
"[(21-24)s:b]" + // 8
"[(24-27)s:c]" + // 9
"[(27-30)s:a]" + // 10
"[(30-33)s:b]" + // 11
"[(33-36)s:c]"); // 12
ki.addDoc(fd);
// Save documents
ki.commit();
SpanQuery sq;
Result kr;
sq = new SpanElementQuery("base", "a");
kr = ki.search(sq, (short) 15);
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 6);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 12, kr.getMatch(0).endPos);
assertEquals("Doc (0)", 0, kr.getMatch(0).internalDocID);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 12, kr.getMatch(1).endPos);
assertEquals("Doc (1)", 0, kr.getMatch(1).internalDocID);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 12, kr.getMatch(2).endPos);
assertEquals("Doc (2)", 0, kr.getMatch(2).internalDocID);
assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 9, kr.getMatch(3).endPos);
assertEquals("Doc (3)", 0, kr.getMatch(3).internalDocID);
assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
assertEquals("Doc (4)", 0, kr.getMatch(4).internalDocID);
assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals("Doc (5)", 0, kr.getMatch(5).internalDocID);
assertEquals(3, ki.numberOf("documents"));
};
@Test
public void indexExample2a () throws IOException {
KrillIndex ki = new KrillIndex();
// <a><a><a>h</a>hij</a>hij</a>
FieldDocument fd = new FieldDocument();
fd.addTV("base",
// <a><a>hhij</a>hijh</a>ij</a>
"h h i j h i j h i j ",
"[s:h|_0$<i>0<i>3|<>:a$<b>64<i>0<i>12<i>3<b>0|"
+ "<>:a$<b>64<i>0<i>24<i>7<b>0|"
+ "<>:a$<b>64<i>0<i>30<i>9<b>0]" + // 1
"[s:h|_1$<i>3<i>6]" + // 2
"[s:i|_2$<i>6<i>9]" + // 3
"[s:j|_3$<i>9<i>12]" + // 4
"[s:h|_4$<i>12<i>15]" + // 5
"[s:i|_5$<i>15<i>18]" + // 6
"[s:j|_6$<i>18<i>21]" + // 7
"[s:h|_7$<i>21<i>24]" + // 8
"[s:i|_8$<i>24<i>27]" + // 9
"[s:j|_9$<i>27<i>30]"); // 10
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq;
Result kr;
sq = new SpanElementQuery("base", "a");
kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 3);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 9, kr.getMatch(2).endPos);
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 10);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 3, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 7, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 7, kr.getMatch(5).endPos);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 9, kr.getMatch(6).endPos);
assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 9, kr.getMatch(7).endPos);
assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 9, kr.getMatch(8).endPos);
assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
assertEquals("EndPos (9)", 9, kr.getMatch(9).endPos);
};
@Test
public void indexExample2b () throws IOException {
KrillIndex ki = new KrillIndex();
// 6,9,12
// <a><a><a>h</a>hij</a>hij</a>h
FieldDocument fd = new FieldDocument();
fd.addTV("base", "h h i j h i j h i j h ",
"[(0-3)s:h|<>:a$<b>64<i>0<i>12<i>3<b>0|"
+ "<>:a$<b>64<i>0<i>21<i>6<b>0|"
+ "<>:a$<b>64<i>0<i>30<i>9<b>0]" + // 1
"[(3-6)s:h]" + // 2
"[(6-9)s:i]" + // 3
"[(9-12)s:j]" + // 4
"[(12-15)s:h]" + // 5
"[(15-18)s:i]" + // 6
"[(18-21)s:j]" + // 7
"[(21-24)s:h]" + // 8
"[(24-27)s:i]" + // 9
"[(27-30)s:j]" + // 10
"[(30-33)s:h]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanElementQuery("base", "a");
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 3);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 9, kr.getMatch(2).endPos);
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 9);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 3, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 6, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 6, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 6, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 9, kr.getMatch(5).endPos);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 9, kr.getMatch(6).endPos);
assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 9, kr.getMatch(7).endPos);
assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 9, kr.getMatch(8).endPos);
};
@Test
public void indexExample2c () throws IOException {
KrillIndex ki = new KrillIndex();
// 2, 6, 9, 12
// <a><a><a>h</a>hij</a>hij</a>h<a>i</i>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "h h i j h i j h i j h i ",
"[(0-3)s:h|<>:a$<b>64<i>0<i>15<i>4<b>0|"
+ "<>:a$<b>64<i>0<i>21<i>7<b>0|"
+ "<>:a$<b>64<i>0<i>30<i>10<b>0]" + // 1
"[(3-6)s:h]" + // 2
"[(6-9)s:i]" + // 3
"[(9-12)s:j]" + // 4
"[(12-15)s:h]" + // 5
"[(15-18)s:i]" + // 6
"[(18-21)s:j]" + // 7
"[(21-24)s:h]" + // 8
"[(24-27)s:i]" + // 9
"[(27-30)s:j]" + // 10
"[(30-33)s:h]" + // 11
"[(33-36)s:i|<>:a$<b>64<i>33<i>36<i>12<b>0]"); // 12
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanElementQuery("base", "a");
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 4);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 7, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 11, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 11);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 4, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 7, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 7, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 7, kr.getMatch(5).endPos);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 10, kr.getMatch(6).endPos);
assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 10, kr.getMatch(7).endPos);
assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 10, kr.getMatch(8).endPos);
assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
assertEquals("EndPos (9)", 10, kr.getMatch(9).endPos);
};
@Test
public void indexExample2d () throws IOException {
KrillIndex ki = new KrillIndex();
// 2, 6, 9, 12, 7
// <a><a><a>h</a>hij</a>hij</a>h<a>h</h>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "h h i j h i j h i j h h ",
"[(0-3)s:h|_0$<i>0<i>3|<>:a$<b>64<i>0<i>15<i>4<b>0|"
+ "<>:a$<b>64<i>0<i>18<i>6<b>0|"
+ "<>:a$<b>64<i>0<i>27<i>8<b>0]"
+ // 1
"[(3-6)s:h|_1$<i>3<i>6]"
+ // 2
"[(6-9)s:i|_2$<i>6<i>9]"
+ // 3
"[(9-12)s:j|_3$<i>9<i>12]"
+ // 4
"[(12-15)s:h|_4$<i>12<i>15]"
+ // 5
"[(15-18)s:i|_5$<i>15<i>18]"
+ // 6
"[(18-21)s:j|_6$<i>18<i>21]"
+ // 7
"[(21-24)s:h|_7$<i>21<i>24]"
+ // 8
"[(24-27)s:i|_8$<i>24<i>27]"
+ // 9
"[(27-30)s:j|_9$<i>27<i>30]"
+ // 10
"[(30-33)s:h|_10$<i>30<i>33|<>:a$<b>64<i>30<i>36<i>12<b>0]"
+ // 11
"[(33-36)s:h|_11$<i>33<i>36|<>:a$<b>64<i>33<i>36<i>12<b>0]"); // 12
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanElementQuery("base", "a");
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 5);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 6, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 8, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 10, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 11, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 12, kr.getMatch(4).endPos);
sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:h")));
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 13);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 4, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 4, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 6, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 0, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 6, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 0, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 8, kr.getMatch(6).endPos);
assertEquals("StartPos (7)", 0, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 8, kr.getMatch(7).endPos);
assertEquals("StartPos (8)", 0, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 8, kr.getMatch(8).endPos);
assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
assertEquals("EndPos (9)", 8, kr.getMatch(9).endPos);
assertEquals("StartPos (10)", 10, kr.getMatch(10).startPos);
assertEquals("EndPos (10)", 12, kr.getMatch(10).endPos);
assertEquals("StartPos (11)", 10, kr.getMatch(11).startPos);
assertEquals("EndPos (11)", 12, kr.getMatch(11).endPos);
assertEquals("StartPos (12)", 11, kr.getMatch(12).startPos);
assertEquals("EndPos (12)", 12, kr.getMatch(12).endPos);
};
@Test
public void indexExample3 () throws IOException {
KrillIndex ki = new KrillIndex();
// <a><a><a>u</a></a></a>
FieldDocument fd = new FieldDocument();
fd.addTV("base", "xyz", "[(0-3)s:xyz|<>:a$<b>64<i>0<i>3<i>0<b>0|"
+ "<>:a$<b>64<i>0<i>3<i>0<b>0|" + "<>:a$<b>64<i>0<i>3<i>0<b>0|"
+ "<>:b$<b>64<i>0<i>3<i>0<b>0]");
ki.addDoc(fd);
// <a><b>x<a>y<a>zcde</a>cde</a>cde</b></a>
fd = new FieldDocument();
fd.addTV("base", "x y z c d e c d e c d e ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>36<i>12<b>0|"
+ "<>:b$<b>64<i>0<i>36<i>12<b>0]"
+ "[(3-6)s:y|<>:a$<b>64<i>3<i>27<i>9<b>0]"
+ "[(6-9)s:z|<>:a$<b>64<i>6<i>18<i>6<b>0]"
+ "[(9-12)s:c]" + "[(12-15)s:d]" + "[(15-18)s:e]"
+ "[(18-21)s:c]" + "[(21-24)s:d]" + "[(24-27)s:e]"
+ "[(27-30)s:c]" + "[(30-33)s:d]" + "[(33-36)s:e]");
ki.addDoc(fd);
// xyz
fd = new FieldDocument();
fd.addTV("base", "x y z ", "[(0-3)s:x]" + "[(3-6)s:y]"
+ "[(6-9)s:z]");
ki.addDoc(fd);
// <a>x<a><b>y<a>zcde</a>cde</b></a>cde</a>
fd = new FieldDocument();
fd.addTV("base", "x y z k l m k l m k l m ",
"[(0-3)s:x|<>:a$<b>64<i>0<i>3<i>12<b>0]"
+ "[(3-6)s:y|<>:a$<b>64<i>3<i>6<i>9<b>0|"
+ "<>:b$<b>64<i>3<i>6<i>9<b>0]"
+ "[(6-9)s:z|<>:a$<b>64<i>6<i>9<i>6<b>0]"
+ "[(9-12)s:k]" + "[(12-15)s:l]" + "[(15-18)s:m]"
+ "[(18-21)s:k]" + "[(21-24)s:l]" + "[(24-27)s:m]"
+ "[(27-30)s:k]" + "[(30-33)s:l]" + "[(33-36)s:m]");
ki.addDoc(fd);
// <a><a><a>h</a>hhij</a>hij</a>hij</a>
fd = new FieldDocument();
fd.addTV("base", "h i j h i j h i j ", "[(0-3)s:h|"
+ "<>:a$<b>64<i>0<i>18<i>3<b>0|"
+ "<>:a$<b>64<i>0<i>27<i>6<b>0|"
+ "<>:a$<b>64<i>0<i>36<i>9<b>0]" + "[(3-6)s:h]"
+ "[(12-15)s:i]" + "[(15-18)s:j]" + "[(18-21)s:h]"
+ "[(21-24)s:i]" + "[(24-27)s:j]" + "[(27-30)s:h]"
+ "[(30-33)s:i]" + "[(33-36)s:j]");
ki.addDoc(fd);
// xyz
fd = new FieldDocument();
fd.addTV("base", "a b c ", "[(0-3)s:a]" + "[(3-6)s:b]"
+ "[(6-9)s:c]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(6, ki.numberOf("documents"));
SpanQuery sq = new SpanElementQuery("base", "a");
Result kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 12);
assertEquals("StartPos (0)", 0, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 0, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 0, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 0, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 0, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 0, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 12, kr.getMatch(3).endPos);
assertEquals("StartPos (4)", 1, kr.getMatch(4).startPos);
assertEquals("EndPos (4)", 9, kr.getMatch(4).endPos);
assertEquals("StartPos (5)", 2, kr.getMatch(5).startPos);
assertEquals("EndPos (5)", 6, kr.getMatch(5).endPos);
assertEquals("StartPos (6)", 0, kr.getMatch(6).startPos);
assertEquals("EndPos (6)", 12, kr.getMatch(6).endPos);
assertEquals("StartPos (7)", 1, kr.getMatch(7).startPos);
assertEquals("EndPos (7)", 9, kr.getMatch(7).endPos);
assertEquals("StartPos (8)", 2, kr.getMatch(8).startPos);
assertEquals("EndPos (8)", 6, kr.getMatch(8).endPos);
assertEquals("StartPos (9)", 0, kr.getMatch(9).startPos);
assertEquals("EndPos (9)", 3, kr.getMatch(9).endPos);
assertEquals("StartPos (10)", 0, kr.getMatch(10).startPos);
assertEquals("EndPos (10)", 6, kr.getMatch(10).endPos);
assertEquals("StartPos (11)", 0, kr.getMatch(11).startPos);
assertEquals("EndPos (11)", 9, kr.getMatch(11).endPos);
};
@Test
public void indexExample3Offsets () throws IOException {
KrillIndex ki = new KrillIndex();
// Er schrie: <s>"Das war ich!"</s>
FieldDocument fd = new FieldDocument();
fd = new FieldDocument();
fd.addTV(
"base",
"Er schrie: \"Das war ich!\" und ging.",
"[(0-2)s:Er|_0$<i>0<i>3]"
+ "[(3-9)s:schrie|_1$<i>3<i>9]"
+ "[(12-15)s:Das|_2$<i>12<i>15|<>:sentence$<b>64<i>11<i>25<i>5<b>0]"
+ "[(16-19)s:war|_3$<i>16<i>19]"
+ "[(20-23)s:ich|_4$<i>20<i>23]"
+ "[(26-29)s:und|_5$<i>26<i>29]"
+ "[(30-34)s:ging|_6$<i>30<i>34]");
ki.addDoc(fd);
// Save documents
ki.commit();
SpanQuery sq = new SpanClassQuery(new SpanElementQuery("base",
"sentence"), (byte) 3);
Result kr;
kr = ki.search(sq, 0, (short) 15, true, (short) 1, true, (short) 1);
assertEquals("totalResults", kr.getTotalResults(), 1);
assertEquals("... schrie: [\"{3:Das war ich}!\"] und ...",
kr.getMatch(0).getSnippetBrackets());
assertEquals(
"<span class=\"context-left\"><span class=\"more\"></span>schrie: </span><mark>&quot;<mark class=\"class-3 level-0\">Das war ich</mark>!&quot;</mark><span class=\"context-right\"> und<span class=\"more\"></span></span>",
kr.getMatch(0).getSnippetHTML());
kr = ki.search(sq, 0, (short) 15, true, (short) 0, true, (short) 0);
assertEquals("... [\"{3:Das war ich}!\"] ...", kr.getMatch(0)
.getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
kr = ki.search(sq, 0, (short) 15, true, (short) 6, true, (short) 6);
assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging.", kr
.getMatch(0).getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
kr = ki.search(sq, 0, (short) 15, true, (short) 2, true, (short) 2);
assertEquals("Er schrie: [\"{3:Das war ich}!\"] und ging ...", kr
.getMatch(0).getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
sq = new SpanClassQuery(new SpanWithinQuery(new SpanElementQuery(
"base", "sentence"), new SpanClassQuery(new SpanTermQuery(
new Term("base", "s:Das")), (byte) 2)), (byte) 1);
kr = ki.search(sq, (short) 15);
assertEquals("Er schrie: [\"{1:{2:Das} war ich}!\"] und ging.", kr
.getMatch(0).getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
sq = new SpanClassQuery(new SpanWithinQuery(new SpanElementQuery(
"base", "sentence"), new SpanClassQuery(new SpanTermQuery(
new Term("base", "s:war")), (byte) 2)), (byte) 1);
kr = ki.search(sq, (short) 15);
assertEquals("Er schrie: [\"{1:Das {2:war} ich}!\"] und ging.", kr
.getMatch(0).getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
sq = new SpanClassQuery(new SpanWithinQuery(new SpanElementQuery(
"base", "sentence"), new SpanClassQuery(new SpanTermQuery(
new Term("base", "s:ich")), (byte) 2)), (byte) 1);
kr = ki.search(sq, (short) 15);
assertEquals("Er schrie: [\"{1:Das war {2:ich}}!\"] und ging.", kr
.getMatch(0).getSnippetBrackets());
assertEquals("totalResults", kr.getTotalResults(), 1);
sq = new SpanClassQuery(new SpanWithinQuery(new SpanElementQuery(
"base", "sentence"), new SpanClassQuery(new SpanTermQuery(
new Term("base", "s:und")), (byte) 2)), (byte) 1);
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 0);
sq = new SpanClassQuery(new SpanWithinQuery(new SpanElementQuery(
"base", "sentence"), new SpanClassQuery(new SpanTermQuery(
new Term("base", "s:schrie")), (byte) 2)), (byte) 1);
kr = ki.search(sq, (short) 15);
assertEquals("totalResults", kr.getTotalResults(), 0);
};
@Test
public void indexExample4 () throws IOException {
KrillIndex ki = new KrillIndex();
// Case 1, 6, 7, 13
// xy<a><a>x</a>b<a>c</a></a>x
FieldDocument fd = new FieldDocument();
fd.addTV("base", "x y x b c x ", "[(0-3)s:x|_0$<i>0<i>3]"
+ "[(3-6)s:y|_1$<i>3<i>6]"
+ "[(6-9)s:x|_2$<i>6<i>9|<>:a$<b>64<i>6<i>9<i>3<b>0|"
+ "<>:a$<b>64<i>6<i>15<i>5<b>0]" + "[(9-12)s:b|_3$<i>9<i>12]"
+ "[(12-15)s:c|_4$<i>12<i>15|<>:a$<b>64<i>12<i>15<i>5<b>0]"
+ "[(15-18)s:x|_5$<i>15<i>18]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanTermQuery(new Term("base", "s:x")));
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 2);
assertEquals("StartPos (0)", 2, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 3, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 2, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 5, kr.getMatch(1).endPos);
};
@Test
public void indexExample5 () throws IOException {
// 1,2,3,6,9,10,12
KrillIndex ki = new KrillIndex();
// hij<a>hi<a>h<a>ij</a></a>hi</a>
FieldDocument fd = new FieldDocument();
fd.addTV(
"base",
"hijhihijhi",
"[(0-1)s:h|i:h|_0$<i>0<i>1|-:a$<i>3|-:t$<i>10]"
+ "[(1-2)s:i|i:i|_1$<i>1<i>2]"
+ "[(2-3)s:j|i:j|_2$<i>2<i>3]"
+ "[(3-4)s:h|i:h|_3$<i>3<i>4|<>:a$<b>64<i>3<i>10<i>10<b>0]"
+ "[(4-5)s:i|i:i|_4$<i>4<i>5]"
+ "[(5-6)s:h|i:h|_5$<i>5<i>6|<>:a$<b>64<i>5<i>8<i>8<b>0]"
+ "[(6-7)s:i|i:i|_6$<i>6<i>7|<>:a$<b>64<i>6<i>8<i>8<b>0]"
+ "[(7-8)s:j|i:j|_7$<i>7<i>8]"
+ "[(8-9)s:h|i:h|_8$<i>8<i>9]"
+ "[(9-10)s:i|i:i|_9$<i>9<i>10]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanNextQuery(new SpanTermQuery(new Term("base", "s:h")),
new SpanTermQuery(new Term("base", "s:i"))));
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 4);
assertEquals("StartPos (0)", 3, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 10, kr.getMatch(0).endPos);
assertEquals("StartPos (1)", 3, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 10, kr.getMatch(1).endPos);
assertEquals("StartPos (2)", 3, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 10, kr.getMatch(2).endPos);
assertEquals("StartPos (3)", 5, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 8, kr.getMatch(3).endPos);
};
@Test
public void indexExample6 () throws IOException {
KrillIndex ki = new KrillIndex();
// 2,5,8,12,13
// h<a><a>i</a>j</a><a>h</a>i j<a>h i</a>j
FieldDocument fd = new FieldDocument();
fd.addTV(
"base",
"hijhi jh ij",
"[(0-1)s:h|i:h|_0$<i>0<i>1|-:a$<i>4|-:t$<i>9]"
+ "[(1-2)s:i|i:i|_1$<i>1<i>2|<>:a$<b>64<i>1<i>2<i>2<b>0|"
+ "<>:a$<b>64<i>1<i>3<i>3<b>0]"
+ "[(2-3)s:j|i:j|_2$<i>2<i>3]"
+ "[(3-4)s:h|i:h|_3$<i>3<i>4|<>:a$<b>64<i>3<i>4<i>4<b>0]"
+ "[(4-5)s:i|i:i|_4$<i>4<i>5]"
+ "[(6-7)s:j|i:j|_5$<i>6<i>7]"
+ "[(7-8)s:h|i:h|_6$<i>7<i>8|<>:a$<b>64<i>7<i>10<i>8<b>0]"
+ "[(9-10)s:i|i:i|_7$<i>9<i>10]"
+ "[(10-11)s:j|i:j|_8$<i>10<i>11]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanNextQuery(new SpanTermQuery(new Term("base", "s:h")),
new SpanNextQuery(new SpanTermQuery(new Term("base",
"s:i")), new SpanTermQuery(new Term("base",
"s:j")))));
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 0);
};
@Test
public void indexExample7 () throws IOException {
KrillIndex ki = new KrillIndex();
// 4,5,11,13
// x<a>x h</a>i j h<a>i j</a>
FieldDocument fd = new FieldDocument();
fd.addTV(
"base",
"xx hi j hi j",
"[(0-1)s:x|i:x|_0$<i>0<i>1|-:a$<i>2|-:t$<i>8]"
+ "[(1-2)s:x|i:x|_1$<i>1<i>2|<>:a$<b>64<i>1<i>4<i>3<b>0]"
+ "[(3-4)s:h|i:h|_2$<i>3<i>4]"
+ "[(4-5)s:i|i:i|_3$<i>4<i>5]"
+ "[(6-7)s:j|i:j|_4$<i>6<i>7]"
+ "[(8-9)s:h|i:h|_5$<i>8<i>9]"
+ "[(9-10)s:i|i:i|_6$<i>9<i>10|<>:a$<b>64<i>9<i>12<i>8<b>0]"
+ "[(11-12)s:j|i:j|_7$<i>11<i>12]");
ki.addDoc(fd);
// Save documents
ki.commit();
assertEquals(1, ki.numberOf("documents"));
SpanQuery sq = new SpanWithinQuery(new SpanElementQuery("base", "a"),
new SpanNextQuery(new SpanTermQuery(new Term("base", "s:h")),
new SpanNextQuery(new SpanTermQuery(new Term("base",
"s:i")), new SpanTermQuery(new Term("base",
"s:j")))));
Result kr = ki.search(sq, (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 0);
};
/** SpanElementQueries */
@Test
public void indexExample8 () throws IOException {
KrillIndex ki = new KrillIndex();
FieldDocument fd = new FieldDocument();
// <a>xx <e>hi j <e>hi j</e></e></a>
fd.addTV(
"base",
"xx hi j hi j",
"[(0-1)s:x|i:x|_0$<i>0<i>1|<>:a$<b>64<i>1<i>12<i>8<b>0]"
+ "[(1-2)s:x|i:x|_1$<i>1<i>2]"
+ "[(3-4)s:h|i:h|_2$<i>3<i>4|<>:e$<b>64<i>3<i>12<i>8<b>0]"
+ "[(4-5)s:i|i:i|_3$<i>4<i>5]"
+ "[(6-7)s:j|i:j|_4$<i>6<i>7]"
+ "[(8-9)s:h|i:h|_5$<i>8<i>9|<>:e$<b>64<i>8<i>9<i>8<b>0]"
+ "[(9-10)s:i|i:i|_6$<i>9<i>10]"
+ "[(11-12)s:j|i:j|_7$<i>11<i>12]");
ki.addDoc(fd);
};
// contains(<s>, (es wird | wird es))
@Test
public void queryJSONpoly2 () throws QueryException, IOException {
String jsonPath = getClass().getResource("/queries/poly2.json")
.getFile();
String jsonPQuery = readFile(jsonPath);
SpanQueryWrapper sqwi = new KrillQuery("tokens").fromJson(jsonPQuery);
SpanWithinQuery sq = (SpanWithinQuery) sqwi.toQuery();
KrillIndex ki = new KrillIndex();
ki.addDoc(getClass().getResourceAsStream("/wiki/DDD-08370.json.gz"),
true);
ki.addDoc(getClass().getResourceAsStream("/wiki/PPP-02924.json.gz"),
true);
ki.commit();
Result kr = ki.search(sq, (short) 10);
assertEquals(2, kr.getTotalResults());
assertEquals(0, kr.getMatch(0).getLocalDocID());
assertEquals(76, kr.getMatch(0).getStartPos());
assertEquals(93, kr.getMatch(0).getEndPos());
assertEquals(1, kr.getMatch(1).getLocalDocID());
assertEquals(237, kr.getMatch(1).getStartPos());
assertEquals(252, kr.getMatch(1).getEndPos());
/*
for (Match km : kr.getMatches()){
System.out.println(km.getStartPos() +","+km.getEndPos()+" "
+km.getSnippetBrackets());
};
*/
};
private String readFile (String path) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader(path));
String str;
while ((str = in.readLine()) != null) {
sb.append(str);
};
in.close();
}
catch (IOException e) {
fail(e.getMessage());
}
return sb.toString();
};
};