package org.apache.solr.search.concordance;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.request.SolrQueryRequest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class CooccurTest extends SolrTestCaseJ4 {
private final static String SOLR_HOME = "test-files/solr";
private final static String CONCORDANCE_FIELD = "text";
/**
* Expected URI at which the given suggester will live.
*/
private static final String requestUri = "/kwCooccur";
private static final String TARGET = "target";
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema-concordance.xml", SOLR_HOME);
setupDocs(CONCORDANCE_FIELD);
}
@AfterClass
public static void afterClass() throws Exception {
assertU(delQ("*:*"));
optimize();
assertU((commit()));
}
private static void setupDocs(String fieldName) {
assertU(adoc("id", "1", fieldName, "aa aa aa aa aa aa " + TARGET + " aa aa aa aa aa aa"));
assertU(adoc("id", "2", fieldName, "aa ab " + TARGET + " ab aa"));
assertU(adoc("id", "3", fieldName, "aa aa ac aa aa aa " + TARGET + " aa aa aa aa aa ad aa aa ac"));
//add a bunch of other docs to make statistics work
for (int i = 4; i < 100; i++) {
assertU(adoc("id", Integer.toString(i), fieldName, "zz zz"));
}
assertU(commit());
}
@Test
public void printlnForBuildingTests() throws Exception {
SolrQueryRequest r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"maxNGram", "3");
System.out.println(r.toString());
System.out.println(h.query(r));
String response = JQ(r);
System.out.println(response);
}
@Test
public void testDefaults() throws Exception {
SolrQueryRequest r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET);
assertQ(r, "//int[@name='numResults'][.='4']",
"//int[@name='collectionSize'][.='99']",
"//str[@name='term'][.='aa']",
"//str[@name='term'][.='ab']",
"//str[@name='term'][.='ac']",
"//str[@name='term'][.='ad']");
assertQ(r, "//str[@name='term'][.='ab']");
}
@Test
public void testWindowSize() throws Exception {
SolrQueryRequest r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"tokensBefore", "3");
//before
System.out.println(h.query(r));
assertQ(r, "//int[@name='numResults'][.='4']",
"//int[@name='collectionSize'][.='99']",
"//str[@name='term'][.='aa']",
"//str[@name='term'][.='ab']",
"//str[@name='term'][.='ad']");
//TODO: figure out how to get this to work
// "//lst[@name='result']/str[@name='term'][.='ac'] and ../long[@name='tf'][.='1']");
r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"tokensAfter", "3");
//after
assertQ(r, "//int[@name='numResults'][.='3']",
"//int[@name='collectionSize'][.='99']",
"//str[@name='term'][.='aa']",
"//str[@name='term'][.='ab']",
"//str[@name='term'][.='ac']");
r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"tokensAfter", "3", "tokensBefore", "3");
// before and after
assertQ(r, "//int[@name='numResults'][.='2']",
"//int[@name='collectionSize'][.='99']",
"//str[@name='term'][.='aa']",
"//str[@name='term'][.='ab']"
);
}
@Test
public void testNGram() throws Exception {
SolrQueryRequest r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"maxNGram", "2");
assertQ(r, "//int[@name='numResults'][.='11']",
"//lst[@name='result'][1]/str[@name='term'][.='aa aa']",
"//lst[@name='result'][1]/long[@name='tf'][.='18']",
"//lst[@name='result'][1]/double[@name='tfidf'][starts-with(., '126.23')]",
"//str[@name='term'][.='ab']",
"//str[@name='term'][.='aa aa']",
"//str[@name='term'][.='aa ab']"
);
r = req("qt", requestUri, "q", CONCORDANCE_FIELD + ":" + TARGET,
"maxNGram", "3");
System.out.println(h.query(r));
assertQ(r, "//int[@name='numResults'][.='18']",
"//lst[@name='result'][2]/str[@name='term'][.='aa aa aa']",
"//lst[@name='result'][4]/str[@name='term'][.='aa aa ac']",
"//str[@name='term'][.='ab']",
"//str[@name='term'][.='aa aa']",
"//str[@name='term'][.='aa ab']"
);
}
}