/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.solr.handler.component; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.SolrException; import org.apache.solr.core.CoreContainer; import org.apache.solr.core.CoreDescriptor; import org.apache.solr.core.SolrCore; import org.apache.solr.spelling.suggest.SuggesterParams; import org.junit.BeforeClass; import org.junit.Test; public class SuggestComponentTest extends SolrTestCaseJ4 { private static final String rh = "/suggest"; private static CoreContainer cc; @BeforeClass public static void beforeClass() throws Exception { initCore("solrconfig-suggestercomponent.xml","schema.xml"); } @Override public void setUp() throws Exception { super.setUp(); // id, cat, price, weight assertU(adoc("id", "0", "cat", "This is a title", "price", "5", "weight", "10")); assertU(adoc("id", "1", "cat", "This is another title", "price", "10", "weight", "10")); assertU(adoc("id", "2", "cat", "Yet another", "price", "15", "weight", "10")); assertU(adoc("id", "3", "cat", "Yet another title", "price", "20", "weight", "20")); assertU(adoc("id", "4", "cat", "suggestions for suggest", "price", "25", "weight", "20")); assertU(adoc("id", "5", "cat", "Red fox", "price", "30", "weight", "20")); assertU(adoc("id", "6", "cat", "Rad fox", "price", "35", "weight", "30")); assertU(adoc("id", "7", "cat", "example data", "price", "40", "weight", "30")); assertU(adoc("id", "8", "cat", "example inputdata", "price", "45", "weight", "30")); assertU(adoc("id", "9", "cat", "blah in blah", "price", "50", "weight", "40")); assertU(adoc("id", "10", "cat", "another blah in blah", "price", "55", "weight", "40")); assertU((commit())); waitForWarming(); } @Override public void tearDown() throws Exception { super.tearDown(); assertU(delQ("*:*")); assertU((commit())); waitForWarming(); // rebuild suggesters with empty index assertQ(req("qt", rh, SuggesterParams.SUGGEST_BUILD_ALL, "true"), "//str[@name='command'][.='buildAll']" ); } @Test public void testDocumentBased() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_dict", SuggesterParams.SUGGEST_BUILD, "true", SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='45']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='40']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_dict", SuggesterParams.SUGGEST_BUILD, "true", SuggesterParams.SUGGEST_Q, "Rad", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='Rad fox']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='35']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='Red fox']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='Rad']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='30']" ); } @Test public void testExpressionBased() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_expr_dict", SuggesterParams.SUGGEST_BUILD, "true", SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='120']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='110']" ); } @Test public void testFileBased() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_file_based", SuggesterParams.SUGGEST_BUILD, "true", SuggesterParams.SUGGEST_Q, "chn", SuggesterParams.SUGGEST_COUNT, "2"), "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='chance']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='1']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='change']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_file_based']/lst[@name='chn']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='1']" ); } @Test public void testMultiSuggester() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_dict", SuggesterParams.SUGGEST_DICT, "suggest_fuzzy_doc_expr_dict", SuggesterParams.SUGGEST_BUILD, "true", SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='45']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='40']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/int[@name='numFound'][.='2']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/str[@name='term'][.='example inputdata']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[1]/long[@name='weight'][.='120']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/str[@name='term'][.='example data']", "//lst[@name='suggest']/lst[@name='suggest_fuzzy_doc_expr_dict']/lst[@name='exampel']/arr[@name='suggestions']/lst[2]/long[@name='weight'][.='110']" ); } @Test public void testBuildAllSuggester() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_BUILD_ALL, "true", SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//str[@name='command'][.='buildAll']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_BUILD_ALL, "true"), "//str[@name='command'][.='buildAll']" ); } @Test public void testReloadAllSuggester() throws Exception { assertQ(req("qt", rh, SuggesterParams.SUGGEST_RELOAD_ALL, "true", SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//str[@name='command'][.='reloadAll']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_RELOAD_ALL, "true"), "//str[@name='command'][.='reloadAll']" ); } @Test public void testBadSuggesterName() throws Exception { String fakeSuggesterName = "does-not-exist"; assertQEx("No suggester named " + fakeSuggesterName +" was configured", req("qt", rh, SuggesterParams.SUGGEST_DICT, fakeSuggesterName, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), SolrException.ErrorCode.BAD_REQUEST ); assertQEx("'" + SuggesterParams.SUGGEST_DICT + "' parameter not specified and no default suggester configured", req("qt", rh, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), SolrException.ErrorCode.BAD_REQUEST ); } @Test public void testDefaultBuildOnStartupNotStoredDict() throws Exception { final String suggester = "suggest_doc_default_startup_no_store"; // validate that this suggester is not storing the lookup assertEquals(suggester, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[8]/str[@name='name']", false)); assertNull(h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[8]/str[@name='storeDir']", false)); // validate that this suggester only builds manually and has not buildOnStartup parameter assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[8]/str[@name='buildOnCommit']", true)); assertNull(h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[8]/str[@name='buildOnStartup']", false)); reloadCore(random().nextBoolean()); // Validate that the suggester was built on new/reload core assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); // add one more doc, should be visible after core reload assertU(adoc("id", "10", "cat", "example data extra ", "price", "40", "weight", "35")); assertU((commit())); waitForWarming(); // buildOnCommit=false, this doc should not be in the suggester yet assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); reloadCore(random().nextBoolean()); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='3']" ); } @Test public void testDefaultBuildOnStartupStoredDict() throws Exception { final String suggester = "suggest_doc_default_startup"; // validate that this suggester is storing the lookup assertEquals(suggester, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[7]/str[@name='name']", false)); assertEquals(suggester, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[7]/str[@name='storeDir']", false)); // validate that this suggester only builds manually and has not buildOnStartup parameter assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[7]/str[@name='buildOnCommit']", true)); assertNull(h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[7]/str[@name='buildOnStartup']", false)); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='0']" ); // build the suggester manually assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_BUILD, "true"), "//str[@name='command'][.='build']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); reloadCore(random().nextBoolean()); // Validate that the suggester was loaded on new/reload core assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); // add one more doc, this should not be seen after a core reload (not until the suggester is manually rebuilt) assertU(adoc("id", "10", "cat", "example data extra ", "price", "40", "weight", "35")); assertU((commit())); waitForWarming(); // buildOnCommit=false, this doc should not be in the suggester yet assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); reloadCore(random().nextBoolean()); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='2']" ); // build the suggester manually assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_BUILD, "true"), "//str[@name='command'][.='build']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "example", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='example']/int[@name='numFound'][.='3']" ); } @Test public void testLoadOnStartup() throws Exception { final String suggester = "suggest_fuzzy_doc_manal_build"; // validate that this suggester is storing the lookup assertEquals(suggester, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[6]/str[@name='name']", false)); assertEquals(suggester, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[6]/str[@name='storeDir']", false)); // validate that this suggester only builds manually assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[6]/str[@name='buildOnCommit']", true)); assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[6]/str[@name='buildOnStartup']", true)); // build the suggester manually assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_BUILD, "true"), "//str[@name='command'][.='build']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); reloadCore(false); // Validate that the suggester was loaded on core reload assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); reloadCore(true); // Validate that the suggester was loaded on new core assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggester, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggester + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); } public void testBuildOnStartupWithCoreReload() throws Exception { doTestBuildOnStartup(false); } public void testBuildOnStartupWithNewCores() throws Exception { doTestBuildOnStartup(true); } private void doTestBuildOnStartup(boolean createNewCores) throws Exception { final String suggesterFuzzy = "suggest_fuzzy_doc_dict"; // the test relies on useColdSearcher=false assertFalse("Precondition not met for test. useColdSearcher must be false", h.getCore().getSolrConfig().useColdSearcher); // validate that this suggester is not storing the lookup and buildOnStartup is not set assertEquals(suggesterFuzzy, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[3]/str[@name='name']", false)); assertNull(h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[3]/str[@name='storeDir']", false)); // assert that buildOnStartup=false assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[3]/str[@name='buildOnStartup']", false)); assertEquals("true", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[3]/str[@name='buildOnCommit']", false)); // verify that this suggester is built (there was a commit in setUp) assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggesterFuzzy, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggesterFuzzy + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); // reload the core and wait for for the listeners to finish reloadCore(createNewCores); if (System.getProperty(SYSPROP_NIGHTLY) != null) { // wait some time here in nightly to make sure there are no race conditions in suggester build Thread.sleep(1000); } // The suggester should be empty assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggesterFuzzy, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggesterFuzzy + "']/lst[@name='exampel']/int[@name='numFound'][.='0']" ); // build the suggester manually assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggesterFuzzy, SuggesterParams.SUGGEST_BUILD, "true"), "//str[@name='command'][.='build']" ); // validate the suggester is built again assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggesterFuzzy, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggesterFuzzy + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); final String suggestStartup = "suggest_fuzzy_doc_dict_build_startup"; // repeat the test with "suggest_fuzzy_doc_dict_build_startup", it is exactly the same but with buildOnStartup=true assertEquals(suggestStartup, h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[5]/str[@name='name']", false)); assertNull(h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[5]/str[@name='storeDir']", false)); assertEquals("true", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[5]/str[@name='buildOnStartup']", false)); assertEquals("false", h.getCore().getSolrConfig().getVal("//searchComponent[@name='suggest']/lst[5]/str[@name='buildOnCommit']", false)); // reload the core reloadCore(createNewCores); // verify that this suggester is built (should build on startup) assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggestStartup, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggestStartup + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); // add one more doc, this should not be seen without rebuilding manually or reloading the core (buildOnCommit=false) assertU(adoc("id", "10", "cat", "example data extra ", "price", "40", "weight", "35")); assertU((commit())); waitForWarming(); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggestStartup, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggestStartup + "']/lst[@name='exampel']/int[@name='numFound'][.='2']" ); // build the suggester manually assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggestStartup, SuggesterParams.SUGGEST_BUILD, "true"), "//str[@name='command'][.='build']" ); assertQ(req("qt", rh, SuggesterParams.SUGGEST_DICT, suggestStartup, SuggesterParams.SUGGEST_Q, "exampel", SuggesterParams.SUGGEST_COUNT, "5"), "//lst[@name='suggest']/lst[@name='" + suggestStartup + "']/lst[@name='exampel']/int[@name='numFound'][.='3']" ); } private void reloadCore(boolean createNewCore) throws Exception { if (createNewCore) { CoreContainer cores = h.getCoreContainer(); SolrCore core = h.getCore(); String dataDir1 = core.getDataDir(); CoreDescriptor cd = core.getCoreDescriptor(); h.close(); createCore(); SolrCore createdCore = h.getCore(); assertEquals(dataDir1, createdCore.getDataDir()); assertEquals(createdCore, h.getCore()); } else { h.reload(); // On regular reloading, wait until the new searcher is registered waitForWarming(); } assertQ(req("qt", "standard", "q", "*:*"), "//*[@numFound='11']" ); } }