Added SpanSubspanQuery deserialization.
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
index 293286b..d4a9ae2 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -19,249 +19,234 @@
import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
public class TestAttributeIndex {
-
- private KorapIndex ki = new KorapIndex();
- private KorapResult kr;
- private FieldDocument fd;
- public TestAttributeIndex() throws IOException {
- ki = new KorapIndex();
- }
-
- private FieldDocument createFieldDoc0(){
- fd = new FieldDocument();
- fd.addString("ID", "doc-0");
- fd.addTV("base",
- "bcbabd",
- "[(0-1)s:a|_1#0-1|<>:s#0-5$<i>5<s>-1|<>:div#0-3$<i>3<s>1|<>:div#0-2$<i>2<s>2|@:class=header$<s>1<i>3|@:class=header$<s>2<i>2]" +
- "[(1-2)s:e|_2#1-2|<>:a#1-2$<i>2<s>1|@:class=header$<s>1<i>2]" +
- "[(2-3)s:e|_3#2-3|<>:div#2-3$<i>5<s>1|@:class=time$<s>1<i>5]" +
- "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=header$<s>1<i>5]" +
- "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|<>:a#4-5$<i>5<s>2|@:class=header$<s>2<i>5]" +
- "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>1|<>:div#5-6$<i>6<s>-1|@:class=header$<s>1<i>6]"+
- "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=header$<s>2<i>7]");
-
- return fd;
- }
-
- private FieldDocument createFieldDoc1(){
- fd = new FieldDocument();
- fd.addString("ID", "doc-1");
- fd.addTV("base",
- "bcbabd",
- "[(0-1)s:b|_1#0-1|<>:s#0-5$<i>5<s>-1|<>:div#0-3$<i>3<s>1|@:class=header$<s>1<i>3|@:class=title$<s>1<i>3|@:class=book$<s>1<i>3]" +
- "[(1-2)s:c|_2#1-2|<>:div#1-2$<i>2<s>1|@:class=header$<s>1<i>2|@:class=title$<s>1<i>2]" +
- "[(2-3)s:b|_3#2-3|<>:div#2-3$<i>5<s>1|@:class=book$<s>1<i>5]" +
- "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=title$<s>1<i>5]" +
- "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|@:class=header$<s>1<i>5|@:class=book$<s>1<i>5|@:class=title$<s>1<i>5]" +
- "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>-1|<>:div#5-6$<i>6<s>1|@:class=header$<s>1<i>6]"+
- "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=title$<s>1<i>7]");
-
- return fd;
- }
-
- private FieldDocument createFieldDoc2(){
- fd = new FieldDocument();
- fd.addString("ID", "doc-1");
- fd.addTV("base",
- "bcbabd",
- "[(0-1)s:b|_1#0-1|<>:s#0-5$<i>5<s>1|<>:div#0-3$<i>3<s>2|@:class=header$<s>2<i>3|@:class=book$<s>1<i>5|@:class=book$<s>2<i>3]" +
- "[(1-2)s:e|_2#1-2|<>:div#1-2$<i>2<s>1|<>:a#1-2$<i>2<s>2|@:class=book$<s>2<i>2|@:class=header$<s>1<i>2]" +
- "[(2-3)s:b|_3#2-3|<>:div#2-3$<i>5<s>1|<>:a#1-2$<i>2<s>2|@:class=header$<s>2<i>2|@:class=book$<s>1<i>5]" +
- "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=title$<s>1<i>5]" +
- "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|@:class=header$<s>1<i>5|@:class=book$<s>1<i>5|@:class=book$<s>1<i>5]" +
- "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>-1|<>:div#5-6$<i>6<s>1|@:class=header$<s>1<i>6]"+
- "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=book$<s>2<i>7]");
-
- return fd;
- }
-
-
- /** Test matching elementRef
- * @throws IOException
- * */
- @Test
- public void testCase1() throws IOException {
- ki.addDoc(createFieldDoc0());
- ki.commit();
-
- SpanAttributeQuery saq = new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=header")),
- true);
-
- List<SpanQuery> sql = new ArrayList<>();
- sql.add(saq);
-
- // div with @class=header
- SpanQuery sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
-
- assertEquals((long) 4, kr.getTotalResults());
- assertEquals(0,kr.getMatch(0).getStartPos());
- assertEquals(2,kr.getMatch(0).getEndPos());
- assertEquals(0,kr.getMatch(1).getStartPos());
- assertEquals(3,kr.getMatch(1).getEndPos());
- assertEquals(3,kr.getMatch(2).getStartPos());
- assertEquals(5,kr.getMatch(2).getEndPos());
- assertEquals(6,kr.getMatch(3).getStartPos());
- assertEquals(7,kr.getMatch(3).getEndPos());
- }
-
- /** Test multiple attributes and negation
- * @throws IOException
- * */
- @Test
- public void testCase2() throws IOException{
- ki.addDoc(createFieldDoc1());
- ki.commit();
- // header and title
- List<SpanQuery> sql = new ArrayList<>();
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=header")),true)
- );
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=title")),true)
- );
-
- SpanQuery sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
-
- assertEquals((long) 4, kr.getTotalResults());
- assertEquals(0,kr.getMatch(0).getStartPos());
- assertEquals(3,kr.getMatch(0).getEndPos());
- assertEquals(1,kr.getMatch(1).getStartPos());
- assertEquals(2,kr.getMatch(1).getEndPos());
- assertEquals(4,kr.getMatch(2).getStartPos());
- assertEquals(5,kr.getMatch(2).getEndPos());
- assertEquals(6,kr.getMatch(3).getStartPos());
- assertEquals(7,kr.getMatch(3).getEndPos());
-
- // Add not Attribute
- // header and title, not book
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=book")),true,true)
- );
-
- sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
-
- assertEquals((long) 2, kr.getTotalResults());
- assertEquals(1,kr.getMatch(0).getStartPos());
- assertEquals(2,kr.getMatch(0).getEndPos());
- assertEquals(6,kr.getMatch(1).getStartPos());
- assertEquals(7,kr.getMatch(1).getEndPos());
-
- // Test multiple negations
- // header, not title, not book
- sql.remove(1);
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=title")),true,true)
- );
-
- sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
- assertEquals((long) 1, kr.getTotalResults());
- assertEquals(5,kr.getMatch(0).getStartPos());
- assertEquals(6,kr.getMatch(0).getEndPos());
- }
-
- /** same attribute types referring to different element types
- * */
- @Test
- public void testCase3() throws IOException{
- ki.addDoc(createFieldDoc2());
- ki.commit();
-
- List<SpanQuery> sql = new ArrayList<>();
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=header")),true)
- );
- sql.add(new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=book")),true,true)
- );
- SpanQuery sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
-
- assertEquals((long) 3, kr.getTotalResults());
- assertEquals(1,kr.getMatch(0).getStartPos());
- assertEquals(2,kr.getMatch(0).getEndPos());
- assertEquals(5,kr.getMatch(1).getStartPos());
- assertEquals(6,kr.getMatch(1).getEndPos());
- assertEquals(6,kr.getMatch(2).getStartPos());
- assertEquals(7,kr.getMatch(2).getEndPos());
- }
-
- /** Test skipto doc for spanWithAttribute*/
- @Test
- public void testCase4() throws IOException{
- ki.addDoc(createFieldDoc1());
- ki.addDoc(createFieldDoc0());
- ki.addDoc(createFieldDoc2());
- ki.commit();
-
- SpanAttributeQuery saq = new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=book")),
- true);
-
- List<SpanQuery> sql = new ArrayList<>();
- sql.add(saq);
-
- SpanWithAttributeQuery sq = new SpanWithAttributeQuery(
- new SpanElementQuery("base", "div"),
- sql, true);
-
- kr = ki.search(sq, (short) 10);
- assertEquals((long) 6,kr.getTotalResults());
-
- SpanNextQuery snq = new SpanNextQuery(
- new SpanTermQuery(new Term("base", "s:e"))
- ,sq);
-
- kr = ki.search(snq, (short) 10);
-
- assertEquals((long) 1,kr.getTotalResults());
- assertEquals(2,kr.getMatch(0).getLocalDocID());
- assertEquals(1,kr.getMatch(0).getStartPos());
- assertEquals(5,kr.getMatch(0).getEndPos());
- }
-
- /** Arbitrary elements with a specific attribute
- * This is just spanAttribute query, to get the elementEnd,
- * you have to use getElementEnd(). Alternatives (unimplemented):
- * 1) store in payload?
- * 2) wrap as a span
- * */
- @Test
- public void testCase5() throws IOException{
- ki.addDoc(createFieldDoc1());
- ki.commit();
- SpanAttributeQuery saq = new SpanAttributeQuery(
- new SpanTermQuery(new Term("base","@:class=book")),
- true);
- kr = ki.search(saq, (short) 10);
- assertEquals((long) 3, kr.getTotalResults());
-
- /*for (int i=0; i< kr.getTotalResults(); i++){
- System.out.println(
- kr.match(i).getLocalDocID()+" "+
- kr.match(i).startPos + " " +
- kr.match(i).endPos
- );
- }*/
- }
+ private KorapIndex ki = new KorapIndex();
+ private KorapResult kr;
+ private FieldDocument fd;
+
+ public TestAttributeIndex() throws IOException {
+ ki = new KorapIndex();
+ }
+
+ private FieldDocument createFieldDoc0() {
+ fd = new FieldDocument();
+ fd.addString("ID", "doc-0");
+ fd.addTV(
+ "base",
+ "bcbabd",
+ "[(0-1)s:a|_1#0-1|<>:s#0-5$<i>5<s>-1|<>:div#0-3$<i>3<s>1|<>:div#0-2$<i>2<s>2|@:class=header$<s>1<i>3|@:class=header$<s>2<i>2]"
+ + "[(1-2)s:e|_2#1-2|<>:a#1-2$<i>2<s>1|@:class=header$<s>1<i>2]"
+ + "[(2-3)s:e|_3#2-3|<>:div#2-3$<i>5<s>1|@:class=time$<s>1<i>5]"
+ + "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=header$<s>1<i>5]"
+ + "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|<>:a#4-5$<i>5<s>2|@:class=header$<s>2<i>5]"
+ + "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>1|<>:div#5-6$<i>6<s>-1|@:class=header$<s>1<i>6]"
+ + "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=header$<s>2<i>7]");
+
+ return fd;
+ }
+
+ private FieldDocument createFieldDoc1() {
+ fd = new FieldDocument();
+ fd.addString("ID", "doc-1");
+ fd.addTV(
+ "base",
+ "bcbabd",
+ "[(0-1)s:b|_1#0-1|<>:s#0-5$<i>5<s>-1|<>:div#0-3$<i>3<s>1|@:class=header$<s>1<i>3|@:class=title$<s>1<i>3|@:class=book$<s>1<i>3]"
+ + "[(1-2)s:c|_2#1-2|<>:div#1-2$<i>2<s>1|@:class=header$<s>1<i>2|@:class=title$<s>1<i>2]"
+ + "[(2-3)s:b|_3#2-3|<>:div#2-3$<i>5<s>1|@:class=book$<s>1<i>5]"
+ + "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=title$<s>1<i>5]"
+ + "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|@:class=header$<s>1<i>5|@:class=book$<s>1<i>5|@:class=title$<s>1<i>5]"
+ + "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>-1|<>:div#5-6$<i>6<s>1|@:class=header$<s>1<i>6]"
+ + "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=title$<s>1<i>7]");
+
+ return fd;
+ }
+
+ private FieldDocument createFieldDoc2() {
+ fd = new FieldDocument();
+ fd.addString("ID", "doc-1");
+ fd.addTV(
+ "base",
+ "bcbabd",
+ "[(0-1)s:b|_1#0-1|<>:s#0-5$<i>5<s>1|<>:div#0-3$<i>3<s>2|@:class=header$<s>2<i>3|@:class=book$<s>1<i>5|@:class=book$<s>2<i>3]"
+ + "[(1-2)s:e|_2#1-2|<>:div#1-2$<i>2<s>1|<>:a#1-2$<i>2<s>2|@:class=book$<s>2<i>2|@:class=header$<s>1<i>2]"
+ + "[(2-3)s:b|_3#2-3|<>:div#2-3$<i>5<s>1|<>:a#1-2$<i>2<s>2|@:class=header$<s>2<i>2|@:class=book$<s>1<i>5]"
+ + "[(3-4)s:a|_4#3-4|<>:div#3-5$<i>5<s>1|@:class=title$<s>1<i>5]"
+ + "[(4-5)s:b|_5#4-5|<>:div#4-5$<i>5<s>1|@:class=header$<s>1<i>5|@:class=book$<s>1<i>5|@:class=book$<s>1<i>5]"
+ + "[(5-6)s:d|_6#5-6|<>:s#5-6$<i>6<s>-1|<>:div#5-6$<i>6<s>1|@:class=header$<s>1<i>6]"
+ + "[(6-7)s:d|_7#6-7|<>:s#6-7$<i>7<s>2|<>:div#6-7$<i>7<s>1|@:class=header$<s>1<i>7|@:class=book$<s>2<i>7]");
+
+ return fd;
+ }
+
+ /**
+ * Test matching elementRef
+ *
+ * @throws IOException
+ * */
+ @Test
+ public void testCase1() throws IOException {
+ ki.addDoc(createFieldDoc0());
+ ki.commit();
+
+ SpanAttributeQuery saq = new SpanAttributeQuery(new SpanTermQuery(
+ new Term("base", "@:class=header")), true);
+
+ // div with @class=header
+ SpanQuery sq = new SpanWithAttributeQuery(new SpanElementQuery("base",
+ "div"), saq, true);
+
+ kr = ki.search(sq, (short) 10);
+
+ assertEquals((long) 4, kr.getTotalResults());
+ assertEquals(0, kr.getMatch(0).getStartPos());
+ assertEquals(2, kr.getMatch(0).getEndPos());
+ assertEquals(0, kr.getMatch(1).getStartPos());
+ assertEquals(3, kr.getMatch(1).getEndPos());
+ assertEquals(3, kr.getMatch(2).getStartPos());
+ assertEquals(5, kr.getMatch(2).getEndPos());
+ assertEquals(6, kr.getMatch(3).getStartPos());
+ assertEquals(7, kr.getMatch(3).getEndPos());
+ }
+
+ /**
+ * Test multiple attributes and negation
+ *
+ * @throws IOException
+ * */
+ @Test
+ public void testCase2() throws IOException {
+ ki.addDoc(createFieldDoc1());
+ ki.commit();
+ // header and title
+ List<SpanQuery> sql = new ArrayList<>();
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=header")), true));
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=title")), true));
+
+ SpanQuery sq = new SpanWithAttributeQuery(new SpanElementQuery("base",
+ "div"), sql, true);
+
+ kr = ki.search(sq, (short) 10);
+
+ assertEquals((long) 4, kr.getTotalResults());
+ assertEquals(0, kr.getMatch(0).getStartPos());
+ assertEquals(3, kr.getMatch(0).getEndPos());
+ assertEquals(1, kr.getMatch(1).getStartPos());
+ assertEquals(2, kr.getMatch(1).getEndPos());
+ assertEquals(4, kr.getMatch(2).getStartPos());
+ assertEquals(5, kr.getMatch(2).getEndPos());
+ assertEquals(6, kr.getMatch(3).getStartPos());
+ assertEquals(7, kr.getMatch(3).getEndPos());
+
+ // Add not Attribute
+ // header and title, not book
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=book")), true, true));
+
+ sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
+ sql, true);
+
+ kr = ki.search(sq, (short) 10);
+
+ assertEquals((long) 2, kr.getTotalResults());
+ assertEquals(1, kr.getMatch(0).getStartPos());
+ assertEquals(2, kr.getMatch(0).getEndPos());
+ assertEquals(6, kr.getMatch(1).getStartPos());
+ assertEquals(7, kr.getMatch(1).getEndPos());
+
+ // Test multiple negations
+ // header, not title, not book
+ sql.remove(1);
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=title")), true, true));
+
+ sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
+ sql, true);
+
+ kr = ki.search(sq, (short) 10);
+ assertEquals((long) 1, kr.getTotalResults());
+ assertEquals(5, kr.getMatch(0).getStartPos());
+ assertEquals(6, kr.getMatch(0).getEndPos());
+ }
+
+ /**
+ * same attribute types referring to different element types
+ * */
+ @Test
+ public void testCase3() throws IOException {
+ ki.addDoc(createFieldDoc2());
+ ki.commit();
+
+ List<SpanQuery> sql = new ArrayList<>();
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=header")), true));
+ sql.add(new SpanAttributeQuery(new SpanTermQuery(new Term("base",
+ "@:class=book")), true, true));
+ SpanQuery sq = new SpanWithAttributeQuery(new SpanElementQuery("base",
+ "div"), sql, true);
+
+ kr = ki.search(sq, (short) 10);
+
+ assertEquals((long) 3, kr.getTotalResults());
+ assertEquals(1, kr.getMatch(0).getStartPos());
+ assertEquals(2, kr.getMatch(0).getEndPos());
+ assertEquals(5, kr.getMatch(1).getStartPos());
+ assertEquals(6, kr.getMatch(1).getEndPos());
+ assertEquals(6, kr.getMatch(2).getStartPos());
+ assertEquals(7, kr.getMatch(2).getEndPos());
+ }
+
+ /** Test skipto doc for spanWithAttribute */
+ @Test
+ public void testCase4() throws IOException {
+ ki.addDoc(createFieldDoc1());
+ ki.addDoc(createFieldDoc0());
+ ki.addDoc(createFieldDoc2());
+ ki.commit();
+
+ SpanAttributeQuery saq = new SpanAttributeQuery(new SpanTermQuery(
+ new Term("base", "@:class=book")), true);
+
+ List<SpanQuery> sql = new ArrayList<>();
+ sql.add(saq);
+
+ SpanWithAttributeQuery sq = new SpanWithAttributeQuery(
+ new SpanElementQuery("base", "div"), sql, true);
+
+ kr = ki.search(sq, (short) 10);
+ assertEquals((long) 6, kr.getTotalResults());
+
+ SpanNextQuery snq = new SpanNextQuery(new SpanTermQuery(new Term(
+ "base", "s:e")), sq);
+
+ kr = ki.search(snq, (short) 10);
+
+ assertEquals((long) 1, kr.getTotalResults());
+ assertEquals(2, kr.getMatch(0).getLocalDocID());
+ assertEquals(1, kr.getMatch(0).getStartPos());
+ assertEquals(5, kr.getMatch(0).getEndPos());
+ }
+
+ /**
+ * Arbitrary elements with a specific attribute This is just spanAttribute
+ * query, to get the elementEnd, you have to use getElementEnd().
+ * Alternatives (unimplemented): 1) store in payload? 2) wrap as a span
+ * */
+ @Test
+ public void testCase5() throws IOException {
+ ki.addDoc(createFieldDoc1());
+ ki.commit();
+ SpanAttributeQuery saq = new SpanAttributeQuery(new SpanTermQuery(
+ new Term("base", "@:class=book")), true);
+ kr = ki.search(saq, (short) 10);
+ assertEquals((long) 3, kr.getTotalResults());
+
+ /*
+ * for (int i=0; i< kr.getTotalResults(); i++){ System.out.println(
+ * kr.match(i).getLocalDocID()+" "+ kr.match(i).startPos + " " +
+ * kr.match(i).endPos ); }
+ */
+ }
}
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
index 7c5d021..81c3d67 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -28,7 +28,7 @@
1. return all words that are subjects of (that are linked by the “SUBJ” relation to) the string “beginnt”
xip/syntax-dep_rel:beginnt >[func=”SUBJ”] xip/syntax-dep_rel:.*
--> rel("SUBJ", highlight(query1), new TermQuery("s:beginnt"))
+-> rel("SUBJ", highlight(query1), new TermQuery("s:beginnt"))
SUBJ ist modelliert mit offset für den gesamten Bereich
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
index ba9b14f..58f88f5 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
@@ -15,45 +15,77 @@
import de.ids_mannheim.korap.query.SpanDistanceQuery;
import de.ids_mannheim.korap.query.SpanSubspanQuery;
-
public class TestSubSpanIndex {
-
- KorapResult kr;
- KorapIndex ki;
-
+
+ KorapResult kr;
+ KorapIndex ki;
+
+ public TestSubSpanIndex() throws IOException {
+ ki = new KorapIndex();
+ ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),
+ true);
+ ki.commit();
+ }
+
@Test
public void testCase1() throws IOException {
- ki = new KorapIndex();
- ki.addDocFile(
- getClass().getResource("/wiki/00001.json.gz").getFile(),true);
- ki.commit();
-
- SpanDistanceQuery sdq = new SpanDistanceQuery(
- new SpanTermQuery(new Term("tokens","tt/p:NN")),
- new SpanTermQuery(new Term("tokens","tt/p:VAFIN")),
- new DistanceConstraint(5, 5, true, false),
- true);
-
- SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 2, true);
- kr = ki.search(ssq, (short) 10);
-
- assertEquals((long) 8,kr.getTotalResults());
- assertEquals(35, kr.getMatch(0).getStartPos());
+ SpanDistanceQuery sdq = new SpanDistanceQuery(
+ new SpanTermQuery(new Term("tokens", "tt/p:NN")),
+ new SpanTermQuery(new Term("tokens", "tt/p:VAFIN")),
+ new DistanceConstraint(5, 5, true,false), true);
+
+ SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 2, true);
+ kr = ki.search(ssq, (short) 10);
+
+ assertEquals((long) 8, kr.getTotalResults());
+ assertEquals(35, kr.getMatch(0).getStartPos());
assertEquals(37, kr.getMatch(0).getEndPos());
assertEquals(179, kr.getMatch(1).getStartPos());
assertEquals(181, kr.getMatch(1).getEndPos());
-
- ssq = new SpanSubspanQuery(sdq, -2, 2, true);
- kr = ki.search(ssq, (short) 10);
-
- assertEquals(39, kr.getMatch(0).getStartPos());
+
+ ssq = new SpanSubspanQuery(sdq, -2, 2, true);
+ kr = ki.search(ssq, (short) 10);
+
+ assertEquals(39, kr.getMatch(0).getStartPos());
assertEquals(41, kr.getMatch(0).getEndPos());
assertEquals(183, kr.getMatch(1).getStartPos());
assertEquals(185, kr.getMatch(1).getEndPos());
-
- /*for (KorapMatch km : kr.getMatches()){
- System.out.println(km.getStartPos() +","+km.getEndPos()
- +km.getSnippetBrackets());
- }*/
- }
+
+ /*
+ * for (KorapMatch km : kr.getMatches()){
+ * System.out.println(km.getStartPos() +","+km.getEndPos()
+ * +km.getSnippetBrackets()); }
+ */
+ }
+
+ @Test
+ public void testCase2() {
+ SpanDistanceQuery sdq = new SpanDistanceQuery(
+ new SpanTermQuery(new Term("tokens", "tt/p:NN")),
+ new SpanTermQuery(new Term("tokens", "tt/p:VAFIN")),
+ new DistanceConstraint(5, 5, true,false), true);
+
+ SpanSubspanQuery ssq = new SpanSubspanQuery(sdq, 0, 7, true);
+ kr = ki.search(ssq, (short) 10);
+
+ assertEquals(35, kr.getMatch(0).getStartPos());
+ assertEquals(41, kr.getMatch(0).getEndPos());
+ assertEquals(179, kr.getMatch(1).getStartPos());
+ assertEquals(185, kr.getMatch(1).getEndPos());
+
+ ssq = new SpanSubspanQuery(sdq, -7, 4, true);
+ kr = ki.search(ssq, (short) 10);
+
+ assertEquals((long) 8, kr.getTotalResults());
+ assertEquals(35, kr.getMatch(0).getStartPos());
+ assertEquals(39, kr.getMatch(0).getEndPos());
+ assertEquals(179, kr.getMatch(1).getStartPos());
+ assertEquals(183, kr.getMatch(1).getEndPos());
+
+ /* for (KorapMatch km : kr.getMatches()){
+ System.out.println(km.getStartPos() +","+km.getEndPos()
+ +km.getSnippetBrackets()); }*/
+
+ }
+
}
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
new file mode 100644
index 0000000..e1e473d
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSubspanQueryJSON.java
@@ -0,0 +1,26 @@
+package de.ids_mannheim.korap.query;
+
+import static de.ids_mannheim.korap.TestSimple.getJSONQuery;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.lucene.search.spans.SpanQuery;
+import org.junit.Test;
+
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+import de.ids_mannheim.korap.util.QueryException;
+
+/**
+ * @author margaretha
+ *
+ */
+public class TestSpanSubspanQueryJSON {
+
+ @Test
+ public void testCase1() throws QueryException {
+ String filepath = getClass().getResource("/queries/submatch.jsonld")
+ .getFile();
+ SpanQueryWrapper sqwi = getJSONQuery(filepath);
+ SpanQuery sq = sqwi.toQuery();
+ assertEquals(sq.toString(), "subspan(<tokens:s />,1,4)");
+ }
+}
diff --git a/src/test/resources/queries/submatch.jsonld b/src/test/resources/queries/submatch.jsonld
new file mode 100644
index 0000000..36153eb
--- /dev/null
+++ b/src/test/resources/queries/submatch.jsonld
@@ -0,0 +1,30 @@
+{
+ "@context":"http://ids-mannheim.de/ns/KorAP/json-ld/v0.2/context.jsonld",
+ "errors":[
+
+ ],
+ "warnings":[
+
+ ],
+ "messages":[
+
+ ],
+ "collection":null,
+ "query":{
+ "@type":"korap:reference",
+ "operation":"operation:focus",
+ "operands":[
+ {
+ "@type":"korap:span",
+ "key":"s"
+ }
+ ],
+ "spanRef":[
+ 1,
+ 4
+ ]
+ },
+ "meta":{
+
+ }
+}