package querqy.solr; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.params.DisMaxParams; import org.apache.solr.request.SolrQueryRequest; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @SolrTestCaseJ4.SuppressSSL public class FieldBoostTest extends SolrTestCaseJ4 { public void index() throws Exception { assertU(adoc("id", "1", "f1", "m", "f2", "o x", "f3", "h")); assertU(adoc("id", "2", "f1", "n", "f2", "p x")); assertU(adoc("id", "3", "f1", "n", "f2", "q x")); assertU(adoc("id", "4", "f1", "x", "f2", "r", "f3", "h")); assertU(commit()); } @BeforeClass public static void beforeTests() throws Exception { initCore("solrconfig-boost.xml", "schema.xml"); } @Override @Before public void setUp() throws Exception { super.setUp(); clearIndex(); index(); } @Test public void testFixedModel() throws Exception { String q = "x"; SolrQueryRequest req = req("q", q, DisMaxParams.QF, "f1 f2", QuerqyDismaxQParser.FBM, QuerqyDismaxQParser.FBM_FIXED, "defType", "querqy"); assertQ("FieldBoost=FIXED should sort doc with greatest length-normalized tf to the first position", req, "//result/doc[1]/str[@name='id'][text()='4']"); } @Test public void testThatFixedModelIsDefaultModel() throws Exception { String q = "x"; SolrQueryRequest req = req("q", q, DisMaxParams.QF, "f1 f2", "defType", "querqy"); assertQ("FieldBoost=FIXED should sort doc with greatest length-normalized tf to the first position", req, "//result/doc[1]/str[@name='id'][text()='4']"); } @Test public void testThatPRMSScoresLeastFrequentFieldLowest() throws Exception { String q = "x"; SolrQueryRequest req = req("q", q, DisMaxParams.QF, "f1 f2", QuerqyDismaxQParser.FBM, QuerqyDismaxQParser.FBM_PRMS, "defType", "querqy", "debugQuery", "true" ); assertQ("FieldBoost=PRMS should sort doc with greatest length-normalized tf to the last position", req, "//result/doc[4]/str[@name='id'][text()='4']"); } @Test public void testThatPRMSIsAppliedToMultiTermQuery() throws Exception { String q = "x h"; SolrQueryRequest req = req("q", q, DisMaxParams.QF, "f1 f2 f3", QuerqyDismaxQParser.FBM, QuerqyDismaxQParser.FBM_PRMS, DisMaxParams.MM, "100%", "defType", "querqy"); assertQ("FieldBoost=PRMS should sort doc with greatest length-normalized tf to the last position", req, "//result/doc[2]/str[@name='id'][text()='4']"); } @Test public void testThatPRMSCanHandleTermNotInIndex() throws Exception { String q = "y24"; SolrQueryRequest req = req("q", q, DisMaxParams.QF, "f1 f2 f3", QuerqyDismaxQParser.FBM, QuerqyDismaxQParser.FBM_PRMS, DisMaxParams.MM, "100%", "defType", "querqy"); assertQ("FieldBoost=PRMS failed to handle term that is not in index", req, "//result[@numFound='0']"); } }