blob: dac0ad0b9cd00bb469d0e5ea5e4d96d74e27f2cd [file] [log] [blame]
/*
* 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.update.processor;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.servlet.SolrRequestParsers;
import org.apache.solr.update.AddUpdateCommand;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class RegexBoostProcessorTest extends SolrTestCaseJ4 {
private static RegexpBoostProcessor reProcessor;
protected static SolrRequestParsers _parser;
protected static ModifiableSolrParams parameters;
private static RegexpBoostProcessorFactory factory;
private SolrInputDocument document;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.setProperty("enable.update.log", "false"); // schema12 doesn't support _version_
initCore("solrconfig.xml", "schema12.xml");
SolrCore core = h.getCore();
_parser = new SolrRequestParsers( null );
SolrQueryResponse resp = null;
parameters = new ModifiableSolrParams();
parameters.set(RegexpBoostProcessor.BOOST_FILENAME_PARAM, "regex-boost-processor-test.txt");
parameters.set(RegexpBoostProcessor.INPUT_FIELD_PARAM, "url");
parameters.set(RegexpBoostProcessor.BOOST_FIELD_PARAM, "urlboost");
SolrQueryRequest req = _parser.buildRequestFrom(core, new ModifiableSolrParams(), null);
factory = new RegexpBoostProcessorFactory();
factory.init(parameters.toNamedList());
reProcessor = (RegexpBoostProcessor) factory.getInstance(req, resp, null);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
// null static members for gc
reProcessor = null;
_parser = null;
parameters = null;
factory = null;
}
@Before
public void setUp() throws Exception {
document = new SolrInputDocument();
super.setUp();
}
@Test
public void testNoBoost() throws Exception {
document.addField("id", "doc1");
document.addField("url", "http://www.nomatch.no");
processAdd(document);
assertEquals(1.0d, document.getFieldValue("urlboost"));
}
@Test
public void testDeboostOld() throws Exception {
document.addField("id", "doc1");
document.addField("url", "http://www.somedomain.no/old/test.html");
processAdd(document);
assertEquals(0.1d, document.getFieldValue("urlboost"));
// Test the other deboost rule
document = new SolrInputDocument();
document.addField("id", "doc1");
document.addField("url", "http://www.somedomain.no/foo/index(1).html");
processAdd(document);
assertEquals(0.5d, document.getFieldValue("urlboost"));
}
@Test
public void testBoostGood() throws Exception {
document.addField("id", "doc1");
document.addField("url", "http://www.mydomain.no/fifty-percent-boost");
processAdd(document);
assertEquals(1.5d, document.getFieldValue("urlboost"));
}
@Test
public void testTwoRules() throws Exception {
document.addField("id", "doc1");
document.addField("url", "http://www.mydomain.no/old/test.html");
processAdd(document);
assertEquals(0.15d, document.getFieldValue("urlboost"));
}
private void processAdd(SolrInputDocument doc) throws Exception {
AddUpdateCommand addCommand = new AddUpdateCommand(null);
addCommand.solrDoc = doc;
reProcessor.processAdd(addCommand);
}
}