blob: f30450c8adb11dbc9a853546a3ec46ba6da2e373 [file] [log] [blame]
package de.ids_mannheim.korap.index;
import static org.junit.Assert.assertEquals;
import org.apache.lucene.search.spans.SpanQuery;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.slf4j.Logger;
import de.ids_mannheim.korap.KrillIndex;
import de.ids_mannheim.korap.query.wrap.SpanSegmentQueryWrapper;
import de.ids_mannheim.korap.query.wrap.SpanSequenceQueryWrapper;
import de.ids_mannheim.korap.response.Result;
@RunWith(JUnit4.class)
public class TestSegmentNegationIndex {
private SpanQuery sq;
private KrillIndex ki;
private Result kr;
private FieldDocument fd;
private Logger log;
@Test
public void testcaseNegation () throws Exception {
ki = new KrillIndex();
ki.addDoc(createFieldDoc0());
ki.addDoc(createFieldDoc1());
ki.addDoc(createFieldDoc2());
ki.addDoc(createFieldDoc3());
ki.commit();
SpanSegmentQueryWrapper ssqw = new SpanSegmentQueryWrapper("base",
"s:b");
ssqw.with("s:c");
SpanSequenceQueryWrapper sqw = new SpanSequenceQueryWrapper("base",
ssqw).append("s:d");
kr = ki.search(sqw.toQuery(), (short) 10);
assertEquals("totalResults", kr.getTotalResults(), 2);
// Match #0
assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
assertEquals("StartPos (0)", 4, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 6, kr.getMatch(0).endPos);
// Match #1 in the other atomic index
assertEquals("doc-number", 3, kr.getMatch(1).getLocalDocID());
assertEquals("StartPos (0)", 0, kr.getMatch(1).startPos);
assertEquals("EndPos (0)", 2, kr.getMatch(1).endPos);
ssqw = new SpanSegmentQueryWrapper("base", "s:b");
ssqw.without("s:c");
sqw = new SpanSequenceQueryWrapper("base", ssqw).append("s:a");
kr = ki.search(sqw.toQuery(), (short) 10);
assertEquals("doc-number", 0, kr.getMatch(0).getLocalDocID());
assertEquals("StartPos (0)", 2, kr.getMatch(0).startPos);
assertEquals("EndPos (0)", 4, kr.getMatch(0).endPos);
assertEquals("doc-number", 1, kr.getMatch(1).getLocalDocID());
assertEquals("StartPos (1)", 1, kr.getMatch(1).startPos);
assertEquals("EndPos (1)", 3, kr.getMatch(1).endPos);
assertEquals("doc-number", 1, kr.getMatch(2).getLocalDocID());
assertEquals("StartPos (2)", 2, kr.getMatch(2).startPos);
assertEquals("EndPos (2)", 4, kr.getMatch(2).endPos);
assertEquals("doc-number", 2, kr.getMatch(3).getLocalDocID());
assertEquals("StartPos (3)", 1, kr.getMatch(3).startPos);
assertEquals("EndPos (3)", 3, kr.getMatch(3).endPos);
}
private FieldDocument createFieldDoc0 () {
fd = new FieldDocument();
fd.addString("ID", "doc-0");
fd.addTV("base", "bcbabd", "[(0-1)s:b|i:b|_1$<i>0<i>1]"
+ "[(1-2)s:c|i:c|s:b|_2$<i>1<i>2]"
+ "[(2-3)s:b|i:b|_3$<i>2<i>3|<>:e$<b>64<i>2<i>4<i>4<b>0]"
+ "[(3-4)s:a|i:a|_4$<i>3<i>4|<>:e$<b>64<i>3<i>5<i>5<b>0|"
+ "<>:e2$<b>64<i>3<i>5<i>5<b>0]"
+ "[(4-5)s:b|i:b|s:c|_5$<i>4<i>5]"
+ "[(5-6)s:d|i:d|_6$<i>5<i>6|<>:e2$<b>64<i>5<i>6<i>6<b>0]");
return fd;
}
private FieldDocument createFieldDoc1 () {
fd = new FieldDocument();
fd.addString("ID", "doc-1");
fd.addTV("base", "babaa", "[(0-1)s:b|i:b|s:c|_1$<i>0<i>1]"
+ "[(1-2)s:a|i:a|s:b|_2$<i>1<i>2|<>:e$<b>64<i>1<i>3<i>3<b>0]"
+ "[(2-3)s:b|i:b|s:a|_3$<i>2<i>3]"
+ "[(3-4)s:a|i:a|_4$<i>3<i>4]" + "[(4-5)s:a|i:a|_5$<i>4<i>5]");
return fd;
}
private FieldDocument createFieldDoc2 () {
fd = new FieldDocument();
fd.addString("ID", "doc-2");
fd.addTV("base", "bdb", "[(0-1)s:b|i:b|_1$<i>0<i>1]"
+ "[(1-2)s:d|i:d|s:b|_2$<i>1<i>2]"
+ "[(2-3)s:b|i:b|s:a|_3$<i>2<i>3]");
return fd;
}
private FieldDocument createFieldDoc3 () {
fd = new FieldDocument();
fd.addString("ID", "doc-3");
fd.addTV("base", "bdb", "[(0-1)s:b|i:b|s:c|_1$<i>0<i>1]"
+ "[(1-2)s:d|_2$<i>1<i>2]" + "[(2-3)s:d|i:d|_3$<i>2<i>3]");
return fd;
}
}