blob: 20ce997f38fe46498c319d78b4d67993a8d6bd5c [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.lucene.document.Field;
import org.apache.solr.common.SolrInputDocument;
import org.junit.BeforeClass;
import org.junit.Test;
public class PreAnalyzedUpdateProcessorTest extends UpdateProcessorTestBase {
String[] simpleTitle = new String[] {
"not pre-analyzed",
"1 =string value=foo bar"
};
String[] jsonTitle = new String[] {
"not pre-analyzed",
"{\"v\":\"1\",\"str\":\"string value\",\"tokens\":[{\"t\":\"foo\"},{\"t\":\"bar\"}]}",
};
String[] simpleTeststop = new String[] {
"1 =this is a test.=one two three",
"1 =this is a test.=three four five"
};
String[] jsonTeststop = new String[] {
"{\"v\":\"1\",\"str\":\"this is a test.\",\"tokens\":[{\"t\":\"one\"},{\"t\":\"two\"},{\"t\":\"three\"}]}",
"{\"v\":\"1\",\"str\":\"this is a test.\",\"tokens\":[{\"t\":\"three\"},{\"t\":\"four\"},{\"t\":\"five\"}]}",
};
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig-update-processor-chains.xml", "schema12.xml");
}
@Test
public void testSimple() throws Exception {
test("pre-analyzed-simple", simpleTitle, simpleTeststop);
}
@Test
public void testJson() throws Exception {
test("pre-analyzed-json", jsonTitle, jsonTeststop);
}
private void test(String chain, String[] title, String[] teststop) throws Exception {
SolrInputDocument doc = processAdd(chain,
doc(f("id", "1"),
f("title", title[0]),
f("teststop", teststop[0]),
f("nonexistent", "foobar"),
f("ssto", teststop[0]),
f("sind", teststop[0])));
assertEquals("title should be unchanged", title[0], doc.getFieldValue("title"));
assertTrue("teststop should be a Field", doc.getFieldValue("teststop") instanceof Field);
Field f = (Field)doc.getFieldValue("teststop");
assertEquals("teststop should have stringValue", "this is a test.", f.stringValue());
assertNotNull("teststop should have tokensStreamValue", f.tokenStreamValue());
assertNull("nonexistent should be dropped", doc.getField("nonexistent"));
// check how SchemaField type affects stored/indexed part processing
f = (Field)doc.getFieldValue("ssto");
assertNotNull("should have ssto", f);
assertNotNull("should have stringValue", f.stringValue());
assertNull("should not have tokenStreamValue", f.tokenStreamValue());
f = (Field)doc.getFieldValue("sind");
assertNotNull("should have sind", f);
assertNull("should not have stringValue: '" + f.stringValue() + "'", f.stringValue());
assertNotNull("should have tokenStreamValue", f.tokenStreamValue());
doc = processAdd(chain,
doc(f("id", "2"),
f("title", title[1]),
f("teststop", teststop[1]),
f("nonexistent", "foobar"),
f("ssto", teststop[1]),
f("sind", teststop[1])));
assertTrue("title should be a Field", doc.getFieldValue("title") instanceof Field);
assertTrue("teststop should be a Field", doc.getFieldValue("teststop") instanceof Field);
f = (Field)doc.getFieldValue("teststop");
assertEquals("teststop should have stringValue", "this is a test.", f.stringValue());
assertNotNull("teststop should have tokensStreamValue", f.tokenStreamValue());
assertNull("nonexistent should be dropped", doc.getField("nonexistent"));
// check how SchemaField type affects stored/indexed part processing
f = (Field)doc.getFieldValue("ssto");
assertNotNull("should have ssto", f);
assertNotNull("should have stringValue", f.stringValue());
assertNull("should not have tokenStreamValue", f.tokenStreamValue());
f = (Field)doc.getFieldValue("sind");
assertNotNull("should have sind", f);
assertNull("should not have stringValue: '" + f.stringValue() + "'", f.stringValue());
assertNotNull("should have tokenStreamValue", f.tokenStreamValue());
assertU(commit());
assertQ(req("teststop:\"one two three\"")
,"//str[@name='id'][.='1']"
,"//str[@name='teststop'][.='this is a test.']"
);
assertQ(req("teststop:three")
,"//*[@numFound='2']"
,"//result/doc[1]/str[@name='id'][.='1']"
,"//result/doc[1]/str[@name='title'][.='not pre-analyzed']"
,"//result/doc[2]/str[@name='id'][.='2']"
,"//result/doc[2]/arr[@name='title']/str[.='string value']"
);
assertQ(req("ssto:three"), "//*[@numFound='0']");
assertQ(req("sind:three"), "//*[@numFound='2']");
}
}