/* * 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']"); } }