mirror of https://github.com/apache/lucene.git
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr
This commit is contained in:
commit
74a0aac1f5
|
@ -125,6 +125,8 @@ Other Changes
|
||||||
* SOLR-11140: Remove unused parameter in (private) SolrMetricManager.prepareCloudPlugins method.
|
* SOLR-11140: Remove unused parameter in (private) SolrMetricManager.prepareCloudPlugins method.
|
||||||
(Omar Abdelnabi via Christine Poerschke)
|
(Omar Abdelnabi via Christine Poerschke)
|
||||||
|
|
||||||
|
* SOLR-11187: contrib/ltr TestModelManagerPersistence improvements. (Yuki Yano via Christine Poerschke)
|
||||||
|
|
||||||
================== 7.0.0 ==================
|
================== 7.0.0 ==================
|
||||||
|
|
||||||
Versions of Major Components
|
Versions of Major Components
|
||||||
|
@ -415,6 +417,9 @@ Bug Fixes
|
||||||
* SOLR-11154: Child documents' return fields now include useDocValuesAsStored fields (Mohammed Sheeri Shaketi Nauage via
|
* SOLR-11154: Child documents' return fields now include useDocValuesAsStored fields (Mohammed Sheeri Shaketi Nauage via
|
||||||
Ishan Chattopadhyaya)
|
Ishan Chattopadhyaya)
|
||||||
|
|
||||||
|
* SOLR-11163: Fix contrib/ltr Normalizer persistence after solr core reload or restart.
|
||||||
|
(Yuki Yano via Christine Poerschke)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
|
@ -90,8 +90,8 @@ public class MinMaxNormalizer extends Normalizer {
|
||||||
@Override
|
@Override
|
||||||
public LinkedHashMap<String,Object> paramsToMap() {
|
public LinkedHashMap<String,Object> paramsToMap() {
|
||||||
final LinkedHashMap<String,Object> params = new LinkedHashMap<>(2, 1.0f);
|
final LinkedHashMap<String,Object> params = new LinkedHashMap<>(2, 1.0f);
|
||||||
params.put("min", '"'+Float.toString(min)+'"');
|
params.put("min", Float.toString(min));
|
||||||
params.put("max", '"'+Float.toString(max)+'"');
|
params.put("max", Float.toString(max));
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,8 @@ public class StandardNormalizer extends Normalizer {
|
||||||
@Override
|
@Override
|
||||||
public LinkedHashMap<String,Object> paramsToMap() {
|
public LinkedHashMap<String,Object> paramsToMap() {
|
||||||
final LinkedHashMap<String,Object> params = new LinkedHashMap<>(2, 1.0f);
|
final LinkedHashMap<String,Object> params = new LinkedHashMap<>(2, 1.0f);
|
||||||
params.put("avg", '"'+Float.toString(avg)+'"');
|
params.put("avg", Float.toString(avg));
|
||||||
params.put("std", '"'+Float.toString(std)+'"');
|
params.put("std", Float.toString(std));
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class TestMinMaxNormalizer {
|
||||||
final MinMaxNormalizer mmn = (MinMaxNormalizer)n;
|
final MinMaxNormalizer mmn = (MinMaxNormalizer)n;
|
||||||
assertEquals(mmn.getMin(), expectedMin, 0.0);
|
assertEquals(mmn.getMin(), expectedMin, 0.0);
|
||||||
assertEquals(mmn.getMax(), expectedMax, 0.0);
|
assertEquals(mmn.getMax(), expectedMax, 0.0);
|
||||||
assertEquals("{min=\""+expectedMin+"\", max=\""+expectedMax+"\"}", mmn.paramsToMap().toString());
|
assertEquals("{min="+expectedMin+", max="+expectedMax+"}", mmn.paramsToMap().toString());
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,4 +118,19 @@ public class TestMinMaxNormalizer {
|
||||||
value = 5;
|
value = 5;
|
||||||
assertEquals((value - 5f) / (10f - 5f), n.normalize(value), 0.0001);
|
assertEquals((value - 5f) / (10f - 5f), n.normalize(value), 0.0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParamsToMap() {
|
||||||
|
final MinMaxNormalizer n1 = new MinMaxNormalizer();
|
||||||
|
n1.setMin(5.0f);
|
||||||
|
n1.setMax(10.0f);
|
||||||
|
|
||||||
|
final Map<String,Object> params = n1.paramsToMap();
|
||||||
|
final MinMaxNormalizer n2 = (MinMaxNormalizer) Normalizer.getInstance(
|
||||||
|
new SolrResourceLoader(),
|
||||||
|
MinMaxNormalizer.class.getName(),
|
||||||
|
params);
|
||||||
|
assertEquals(n1.getMin(), n2.getMin(), 1e-6);
|
||||||
|
assertEquals(n1.getMax(), n2.getMax(), 1e-6);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class TestStandardNormalizer {
|
||||||
final StandardNormalizer sn = (StandardNormalizer)n;
|
final StandardNormalizer sn = (StandardNormalizer)n;
|
||||||
assertEquals(sn.getAvg(), expectedAvg, 0.0);
|
assertEquals(sn.getAvg(), expectedAvg, 0.0);
|
||||||
assertEquals(sn.getStd(), expectedStd, 0.0);
|
assertEquals(sn.getStd(), expectedStd, 0.0);
|
||||||
assertEquals("{avg=\""+expectedAvg+"\", std=\""+expectedStd+"\"}", sn.paramsToMap().toString());
|
assertEquals("{avg="+expectedAvg+", std="+expectedStd+"}", sn.paramsToMap().toString());
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,4 +130,19 @@ public class TestStandardNormalizer {
|
||||||
assertEquals((v - 10f) / (1.5f), norm.normalize(v), 0.0001);
|
assertEquals((v - 10f) / (1.5f), norm.normalize(v), 0.0001);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParamsToMap() {
|
||||||
|
final StandardNormalizer n1 = new StandardNormalizer();
|
||||||
|
n1.setAvg(2.0f);
|
||||||
|
n1.setStd(3.0f);
|
||||||
|
|
||||||
|
final Map<String, Object> params = n1.paramsToMap();
|
||||||
|
final StandardNormalizer n2 = (StandardNormalizer) Normalizer.getInstance(
|
||||||
|
new SolrResourceLoader(),
|
||||||
|
StandardNormalizer.class.getName(),
|
||||||
|
params);
|
||||||
|
assertEquals(n1.getAvg(), n2.getAvg(), 1e-6);
|
||||||
|
assertEquals(n1.getStd(), n2.getStd(), 1e-6);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,15 @@ import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.solr.ltr.TestRerankBase;
|
import org.apache.solr.ltr.TestRerankBase;
|
||||||
import org.apache.solr.ltr.feature.ValueFeature;
|
import org.apache.solr.ltr.feature.ValueFeature;
|
||||||
import org.apache.solr.ltr.model.LinearModel;
|
import org.apache.solr.ltr.model.LinearModel;
|
||||||
import org.junit.Before;
|
import org.apache.solr.ltr.store.FeatureStore;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.noggit.ObjectBuilder;
|
import org.noggit.ObjectBuilder;
|
||||||
|
|
||||||
public class TestModelManagerPersistence extends TestRerankBase {
|
public class TestModelManagerPersistence extends TestRerankBase {
|
||||||
|
|
||||||
@Before
|
@BeforeClass
|
||||||
public void init() throws Exception {
|
public static void init() throws Exception {
|
||||||
setupPersistenttest(true);
|
setupPersistenttest(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,24 +99,90 @@ public class TestModelManagerPersistence extends TestRerankBase {
|
||||||
"/responseHeader/status==0");
|
"/responseHeader/status==0");
|
||||||
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test2",
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test2",
|
||||||
"/features/==[]");
|
"/features/==[]");
|
||||||
assertJQ(ManagedModelStore.REST_END_POINT + "/test-model2",
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
"/models/[0]/name=='test-model'");
|
"/models/[0]/name=='test-model'");
|
||||||
restTestHarness.reload();
|
restTestHarness.reload();
|
||||||
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test2",
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test2",
|
||||||
"/features/==[]");
|
"/features/==[]");
|
||||||
assertJQ(ManagedModelStore.REST_END_POINT + "/test-model2",
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
"/models/[0]/name=='test-model'");
|
"/models/[0]/name=='test-model'");
|
||||||
|
|
||||||
assertJDelete(ManagedModelStore.REST_END_POINT + "/test-model1",
|
assertJDelete(ManagedModelStore.REST_END_POINT + "/test-model",
|
||||||
"/responseHeader/status==0");
|
"/responseHeader/status==0");
|
||||||
assertJDelete(ManagedFeatureStore.REST_END_POINT + "/test1",
|
assertJDelete(ManagedFeatureStore.REST_END_POINT + "/test1",
|
||||||
"/responseHeader/status==0");
|
"/responseHeader/status==0");
|
||||||
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test1",
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test1",
|
||||||
"/features/==[]");
|
"/features/==[]");
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
restTestHarness.reload();
|
restTestHarness.reload();
|
||||||
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test1",
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/test1",
|
||||||
"/features/==[]");
|
"/features/==[]");
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFilePersistence() throws Exception {
|
||||||
|
// check whether models and features are empty
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/==[]");
|
||||||
|
|
||||||
|
// load models and features from files
|
||||||
|
loadFeatures("features-linear.json");
|
||||||
|
loadModels("linear-model.json");
|
||||||
|
|
||||||
|
// check loaded models and features
|
||||||
|
final String modelName = "6029760550880411648";
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/[0]/name=='"+modelName+"'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[0]/name=='title'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[1]/name=='description'");
|
||||||
|
|
||||||
|
// check persistence after reload
|
||||||
|
restTestHarness.reload();
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/[0]/name=='"+modelName+"'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[0]/name=='title'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[1]/name=='description'");
|
||||||
|
|
||||||
|
// check persistence after restart
|
||||||
|
jetty.stop();
|
||||||
|
jetty.start();
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/[0]/name=='"+modelName+"'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[0]/name=='title'");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/[1]/name=='description'");
|
||||||
|
|
||||||
|
// delete loaded models and features
|
||||||
|
restTestHarness.delete(ManagedModelStore.REST_END_POINT + "/"+modelName);
|
||||||
|
restTestHarness.delete(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME);
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/==[]");
|
||||||
|
|
||||||
|
// check persistence after reload
|
||||||
|
restTestHarness.reload();
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/==[]");
|
||||||
|
|
||||||
|
// check persistence after restart
|
||||||
|
jetty.stop();
|
||||||
|
jetty.start();
|
||||||
|
assertJQ(ManagedModelStore.REST_END_POINT,
|
||||||
|
"/models/==[]");
|
||||||
|
assertJQ(ManagedFeatureStore.REST_END_POINT + "/" + FeatureStore.DEFAULT_FEATURE_STORE_NAME,
|
||||||
|
"/features/==[]");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue