mirror of https://github.com/apache/lucene.git
adding neccessary SolrConfig hooks so TestHarness and unit tests can specify arbitrary solrconfig.xml files, modified unit tests to demonstrate this -- per SOLR-3 and SOLR-8
git-svn-id: https://svn.apache.org/repos/asf/incubator/solr/trunk@395148 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
99a3a71234
commit
c2338fca20
|
@ -164,7 +164,7 @@
|
||||||
haltonfailure="no"
|
haltonfailure="no"
|
||||||
errorProperty="tests.failed"
|
errorProperty="tests.failed"
|
||||||
failureProperty="tests.failed"
|
failureProperty="tests.failed"
|
||||||
dir="src/apps/SolrTest"
|
dir="src/test/test-files/"
|
||||||
>
|
>
|
||||||
<syspropertyset>
|
<syspropertyset>
|
||||||
<propertyref prefix="solr" />
|
<propertyref prefix="solr" />
|
||||||
|
|
|
@ -16,27 +16,64 @@
|
||||||
|
|
||||||
package org.apache.solr.core;
|
package org.apache.solr.core;
|
||||||
|
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Provides a static refrence to a Config object modeling the main
|
||||||
|
* configuration data for a a Solr instance -- typically found in
|
||||||
|
* "solrconfig.xml".
|
||||||
|
*
|
||||||
* @author yonik
|
* @author yonik
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class SolrConfig {
|
public class SolrConfig {
|
||||||
|
|
||||||
|
public static final String DEFAULT_CONF_FILE = "solrconfig.xml";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Singleton containing all configuration.
|
||||||
|
*/
|
||||||
public static Config config;
|
public static Config config;
|
||||||
static {
|
|
||||||
RuntimeException e=null;
|
/**
|
||||||
String file="solrconfig.xml";
|
* (Re)loads the static configation information from the specified file.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* This method is called implicitly on ClassLoad, but it may be
|
||||||
|
* called explicitly to change the Configuration used for the purpose
|
||||||
|
* of testing - in which case it should be called prior to initializing
|
||||||
|
* a SolrCore.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* This method should <b>only</b> be called for testing purposes.
|
||||||
|
* Because it modifies a singleton, it is not suitable for running
|
||||||
|
* multi-threaded tests.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param file file name to load
|
||||||
|
* @see Config#openResource
|
||||||
|
*/
|
||||||
|
public static synchronized void initConfig(String file)
|
||||||
|
throws ParserConfigurationException, IOException, SAXException {
|
||||||
|
|
||||||
InputStream is = Config.openResource(file);
|
InputStream is = Config.openResource(file);
|
||||||
|
config=new Config(file, is, "/config/");
|
||||||
|
is.close();
|
||||||
|
Config.log.info("Loaded SolrConfig: " + file);
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
try {
|
try {
|
||||||
config=new Config(file, is, "/config/");
|
initConfig(DEFAULT_CONF_FILE);
|
||||||
is.close();
|
|
||||||
} catch (Exception ee) {
|
} catch (Exception ee) {
|
||||||
throw new RuntimeException("Error in solrconfig.xml", ee);
|
throw new RuntimeException("Error in " + DEFAULT_CONF_FILE, ee);
|
||||||
}
|
}
|
||||||
|
|
||||||
Config.log.info("Loaded Config solrconfig.xml");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,10 +45,16 @@ public abstract class AbstractSolrTestCase extends TestCase {
|
||||||
protected TestHarness.LocalRequestFactory lrf;
|
protected TestHarness.LocalRequestFactory lrf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subclasses must define this method to return the path of the
|
* Subclasses must define this method to return the name of the
|
||||||
* schema.xml they wish to use.
|
* schema.xml they wish to use.
|
||||||
*/
|
*/
|
||||||
public abstract String getSchemaPath();
|
public abstract String getSchemaFile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subclasses must define this method to return the name of the
|
||||||
|
* solrconfig.xml they wish to use.
|
||||||
|
*/
|
||||||
|
public abstract String getSolrConfigFile();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The directory used to story the index managed by the TestHarness h
|
* The directory used to story the index managed by the TestHarness h
|
||||||
|
@ -72,7 +78,9 @@ public abstract class AbstractSolrTestCase extends TestCase {
|
||||||
+ getClass().getName() + "-" + getName() + "-"
|
+ getClass().getName() + "-" + getName() + "-"
|
||||||
+ System.currentTimeMillis());
|
+ System.currentTimeMillis());
|
||||||
dataDir.mkdirs();
|
dataDir.mkdirs();
|
||||||
h = new TestHarness(dataDir.getAbsolutePath(), getSchemaPath());
|
h = new TestHarness(dataDir.getAbsolutePath(),
|
||||||
|
getSolrConfigFile(),
|
||||||
|
getSchemaFile());
|
||||||
lrf = h.getRequestFactory
|
lrf = h.getRequestFactory
|
||||||
("standard",0,20,"version","2.0");
|
("standard",0,20,"version","2.0");
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package org.apache.solr.util;
|
package org.apache.solr.util;
|
||||||
|
|
||||||
import org.apache.solr.schema.IndexSchema;
|
import org.apache.solr.schema.IndexSchema;
|
||||||
|
import org.apache.solr.core.SolrConfig;
|
||||||
import org.apache.solr.core.SolrCore;
|
import org.apache.solr.core.SolrCore;
|
||||||
import org.apache.solr.request.*;
|
import org.apache.solr.request.*;
|
||||||
|
|
||||||
|
@ -55,12 +56,34 @@ public class TestHarness {
|
||||||
private DocumentBuilder builder;
|
private DocumentBuilder builder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Assumes "solrconfig.xml" is the config file to use, and
|
||||||
|
* "schema.xml" is the schema path to use.
|
||||||
|
*
|
||||||
|
* @param dataDirectory path for index data, will not be cleaned up
|
||||||
|
*/
|
||||||
|
public TestHarness(String dataDirectory) {
|
||||||
|
this(dataDirectory, "schema.xml");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Assumes "solrconfig.xml" is the config file to use.
|
||||||
|
*
|
||||||
* @param dataDirectory path for index data, will not be cleaned up
|
* @param dataDirectory path for index data, will not be cleaned up
|
||||||
* @param schemaFile path of schema file
|
* @param schemaFile path of schema file
|
||||||
*/
|
*/
|
||||||
public TestHarness(String dataDirectory, String schemaFile) {
|
public TestHarness(String dataDirectory, String schemaFile) {
|
||||||
core = new SolrCore(dataDirectory, new IndexSchema(schemaFile));
|
this(dataDirectory, "solrconfig.xml", schemaFile);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param dataDirectory path for index data, will not be cleaned up
|
||||||
|
* @param confFile solrconfig filename
|
||||||
|
* @param schemaFile schema filename
|
||||||
|
*/
|
||||||
|
public TestHarness(String dataDirectory,
|
||||||
|
String confFile,
|
||||||
|
String schemaFile) {
|
||||||
try {
|
try {
|
||||||
|
SolrConfig.initConfig(confFile);
|
||||||
|
core = new SolrCore(dataDirectory, new IndexSchema(schemaFile));
|
||||||
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
|
|
@ -25,7 +25,8 @@ import org.apache.solr.util.*;
|
||||||
*/
|
*/
|
||||||
public class BasicFunctionalityTest extends AbstractSolrTestCase {
|
public class BasicFunctionalityTest extends AbstractSolrTestCase {
|
||||||
|
|
||||||
public String getSchemaPath() { return "solr/conf/schema.xml"; }
|
public String getSchemaFile() { return "schema.xml"; }
|
||||||
|
public String getSolrConfigFile() { return "solrconfig.xml"; }
|
||||||
|
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
// if you override setUp or tearDown, you better call
|
// if you override setUp or tearDown, you better call
|
||||||
|
|
|
@ -30,7 +30,8 @@ import java.io.IOException;
|
||||||
*/
|
*/
|
||||||
public class ConvertedLegacyTest extends AbstractSolrTestCase {
|
public class ConvertedLegacyTest extends AbstractSolrTestCase {
|
||||||
|
|
||||||
public String getSchemaPath() { return "solr/conf/schema.xml"; }
|
public String getSchemaFile() { return "schema.xml"; }
|
||||||
|
public String getSolrConfigFile() { return "solrconfig.xml"; }
|
||||||
|
|
||||||
public void testABunchOfConvertedStuff() {
|
public void testABunchOfConvertedStuff() {
|
||||||
// these may be reused by things that need a special query
|
// these may be reused by things that need a special query
|
||||||
|
|
|
@ -29,10 +29,25 @@ import java.io.IOException;
|
||||||
public class SampleTest extends AbstractSolrTestCase {
|
public class SampleTest extends AbstractSolrTestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All subclasses of AbstractSolrTestCase must define this method
|
* All subclasses of AbstractSolrTestCase must define this method.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Note that different tests can use different schemas by refering
|
||||||
|
* to any crazy path they want (as long as it works).
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public String getSchemaPath() { return "solr/conf/schema.xml"; }
|
public String getSchemaFile() { return "solr/crazy-path-to-schema.xml"; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All subclasses of AbstractSolrTestCase must define this method
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Note that different tests can use different configs by refering
|
||||||
|
* to any crazy path they want (as long as it works).
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public String getSolrConfigFile() { return "solr/crazy-path-to-config.xml"; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Demonstration of some of the simple ways to use the base class
|
* Demonstration of some of the simple ways to use the base class
|
||||||
*/
|
*/
|
||||||
|
@ -71,7 +86,7 @@ public class SampleTest extends AbstractSolrTestCase {
|
||||||
doc("id", "4059",
|
doc("id", "4059",
|
||||||
"subject", "Who Me Again?") + "</add>");
|
"subject", "Who Me Again?") + "</add>");
|
||||||
|
|
||||||
// or really make the xml yourself
|
/* or really make the xml yourself */
|
||||||
assertU("<add><doc><field name=\"id\">4055</field>"
|
assertU("<add><doc><field name=\"id\">4055</field>"
|
||||||
+"<field name=\"subject\">Hoss the Hoss man Hostetter</field>"
|
+"<field name=\"subject\">Hoss the Hoss man Hostetter</field>"
|
||||||
+"</doc></add>");
|
+"</doc></add>");
|
||||||
|
@ -87,9 +102,12 @@ public class SampleTest extends AbstractSolrTestCase {
|
||||||
,"//int[@name='id'][.='4055']"
|
,"//int[@name='id'][.='4055']"
|
||||||
);
|
);
|
||||||
|
|
||||||
/* make your own LocalRequestFactory to build a request */
|
/* make your own LocalRequestFactory to build a request
|
||||||
|
*
|
||||||
|
* Note: the qt proves we are using our custom config...
|
||||||
|
*/
|
||||||
TestHarness.LocalRequestFactory l = h.getRequestFactory
|
TestHarness.LocalRequestFactory l = h.getRequestFactory
|
||||||
("standard",100,200,"version","2.1");
|
("crazy_custom_qt",100,200,"version","2.1");
|
||||||
assertQ("how did i find Mack Daddy? ",
|
assertQ("how did i find Mack Daddy? ",
|
||||||
l.makeRequest( "Mack Daddy" )
|
l.makeRequest( "Mack Daddy" )
|
||||||
,"//result[@numFound=0]"
|
,"//result[@numFound=0]"
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
This directory is where any non-transient, non-java files needed
|
||||||
|
for the execution of tests should live.
|
||||||
|
|
||||||
|
It is used as the CWD when running JUnit tests.
|
|
@ -0,0 +1,5 @@
|
||||||
|
#use a protected word file to avoid stemming two
|
||||||
|
#unrelated words to the same base word.
|
||||||
|
#to test, we will use words that would normally obviously be stemmed.
|
||||||
|
cats
|
||||||
|
ridding
|
|
@ -0,0 +1,346 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!-- The Solr schema file. This file should be named "schema.xml" and
|
||||||
|
should be located where the classloader for the Solr webapp can find it.
|
||||||
|
|
||||||
|
$Id: schema.xml 382610 2006-03-03 01:43:03Z yonik $
|
||||||
|
$Source: /cvs/main/searching/solr-configs/test/WEB-INF/classes/schema.xml,v $
|
||||||
|
$Name: $
|
||||||
|
-->
|
||||||
|
|
||||||
|
<schema name="test" version="1.0">
|
||||||
|
<types>
|
||||||
|
|
||||||
|
<!-- field type definitions... note that the "name" attribute is
|
||||||
|
just a label to be used by field definitions. The "class"
|
||||||
|
attribute and any other attributes determine the real type and
|
||||||
|
behavior of the fieldtype.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- numeric field types that store and index the text
|
||||||
|
value verbatim (and hence don't sort correctly or support range queries.)
|
||||||
|
These are provided more for backward compatability, allowing one
|
||||||
|
to create a schema that matches an existing lucene index.
|
||||||
|
-->
|
||||||
|
<fieldtype name="integer" class="solr.IntField"/>
|
||||||
|
<fieldtype name="long" class="solr.LongField"/>
|
||||||
|
<fieldtype name="float" class="solr.FloatField"/>
|
||||||
|
<fieldtype name="double" class="solr.DoubleField"/>
|
||||||
|
|
||||||
|
<!-- numeric field types that manipulate the value into
|
||||||
|
a string value that isn't human readable in it's internal form,
|
||||||
|
but sorts correctly and supports range queries.
|
||||||
|
|
||||||
|
If sortMissingLast="true" then a sort on this field will cause documents
|
||||||
|
without the field to come after documents with the field,
|
||||||
|
regardless of the requested sort order.
|
||||||
|
If sortMissingFirst="true" then a sort on this field will cause documents
|
||||||
|
without the field to come before documents with the field,
|
||||||
|
regardless of the requested sort order.
|
||||||
|
If sortMissingLast="false" and sortMissingFirst="false" (the default),
|
||||||
|
then default lucene sorting will be used which places docs without the field
|
||||||
|
first in an ascending sort and last in a descending sort.
|
||||||
|
-->
|
||||||
|
<fieldtype name="sint" class="solr.SortableIntField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="sfloat" class="solr.SortableFloatField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true"/>
|
||||||
|
|
||||||
|
<!-- bcd versions of sortable numeric type may provide smaller
|
||||||
|
storage space and support very large numbers.
|
||||||
|
-->
|
||||||
|
<fieldtype name="bcdint" class="solr.BCDIntField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="bcdlong" class="solr.BCDLongField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="bcdstr" class="solr.BCDStrField" sortMissingLast="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true"/>
|
||||||
|
<fieldtype name="string" class="solr.StrField" sortMissingLast="true"/>
|
||||||
|
|
||||||
|
<!-- format for date is 1995-12-31T23:59:59.999Z and only the fractional
|
||||||
|
seconds part (.999) is optional.
|
||||||
|
-->
|
||||||
|
<fieldtype name="date" class="solr.DateField" sortMissingLast="true"/>
|
||||||
|
|
||||||
|
<!-- solr.TextField allows the specification of custom
|
||||||
|
text analyzers specified as a tokenizer and a list
|
||||||
|
of token filters.
|
||||||
|
-->
|
||||||
|
<fieldtype name="text" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.StandardTokenizerFactory"/>
|
||||||
|
<filter class="solr.StandardFilterFactory"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory"/>
|
||||||
|
<!-- lucene PorterStemFilterFactory deprecated
|
||||||
|
<filter class="solr.PorterStemFilterFactory"/>
|
||||||
|
-->
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
|
||||||
|
<fieldtype name="nametext" class="solr.TextField">
|
||||||
|
<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<fieldtype name="teststop" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
|
||||||
|
<filter class="solr.StandardFilterFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<!-- fieldtypes in this section isolate tokenizers and tokenfilters for testing -->
|
||||||
|
<fieldtype name="lowertok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.LowerCaseTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="standardtok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.StandardTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="lettertok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.LetterTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="whitetok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.WhitespaceTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="HTMLstandardtok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.HTMLStripStandardTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="HTMLwhitetok" class="solr.TextField">
|
||||||
|
<analyzer><tokenizer class="solr.HTMLStripWhitespaceTokenizerFactory"/></analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="standardtokfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.StandardTokenizerFactory"/>
|
||||||
|
<filter class="solr.StandardFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="standardfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.StandardFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="lowerfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="porterfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.PorterStemFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<!-- fieldtype name="snowballfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.SnowballPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype -->
|
||||||
|
<fieldtype name="engporterfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="custengporterfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="stopfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory" ignoreCase="true"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="custstopfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
<fieldtype name="lengthfilt" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.LengthFilterFactory" min="2" max="5"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<fieldtype name="subword" class="solr.TextField">
|
||||||
|
<analyzer type="index">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory"/>
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
<analyzer type="query">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory"/>
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<!-- more flexible in matching skus, but more chance of a false match -->
|
||||||
|
<fieldtype name="skutype1" class="solr.TextField">
|
||||||
|
<analyzer type="index">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
<analyzer type="query">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<!-- less flexible in matching skus, but less chance of a false match -->
|
||||||
|
<fieldtype name="skutype2" class="solr.TextField">
|
||||||
|
<analyzer type="index">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
<analyzer type="query">
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<!-- less flexible in matching skus, but less chance of a false match -->
|
||||||
|
<fieldtype name="syn" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter name="syn" class="solr.SynonymFilterFactory" synonyms="synonyms.txt"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
<fieldtype name="unstored" class="solr.StrField" indexed="true" stored="false"/>
|
||||||
|
|
||||||
|
|
||||||
|
<fieldtype name="textgap" class="solr.TextField" multiValued="true" positionIncrementGap="100">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
|
||||||
|
</types>
|
||||||
|
|
||||||
|
|
||||||
|
<fields>
|
||||||
|
<field name="id" type="integer" indexed="true" stored="true"/>
|
||||||
|
<field name="name" type="nametext" indexed="true" stored="true"/>
|
||||||
|
<field name="text" type="text" indexed="true" stored="false"/>
|
||||||
|
<field name="subject" type="text" indexed="true" stored="true"/>
|
||||||
|
<field name="title" type="nametext" indexed="true" stored="true"/>
|
||||||
|
<field name="weight" type="float" indexed="true" stored="true"/>
|
||||||
|
<field name="bday" type="date" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<field name="title_stemmed" type="text" indexed="true" stored="false"/>
|
||||||
|
<field name="title_lettertok" type="lettertok" indexed="true" stored="false"/>
|
||||||
|
|
||||||
|
<field name="syn" type="syn" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<!-- to test property inheritance and overriding -->
|
||||||
|
<field name="shouldbeunstored" type="unstored" />
|
||||||
|
<field name="shouldbestored" type="unstored" stored="true"/>
|
||||||
|
<field name="shouldbeunindexed" type="unstored" indexed="false" stored="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- test different combinations of indexed and stored -->
|
||||||
|
<field name="bind" type="boolean" indexed="true" stored="false"/>
|
||||||
|
<field name="bsto" type="boolean" indexed="false" stored="true"/>
|
||||||
|
<field name="bindsto" type="boolean" indexed="true" stored="true"/>
|
||||||
|
<field name="isto" type="integer" indexed="false" stored="true"/>
|
||||||
|
<field name="iind" type="integer" indexed="true" stored="false"/>
|
||||||
|
<field name="ssto" type="string" indexed="false" stored="true"/>
|
||||||
|
<field name="sind" type="string" indexed="true" stored="false"/>
|
||||||
|
<field name="sindsto" type="string" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<!-- fields to test individual tokenizers and tokenfilters -->
|
||||||
|
<field name="teststop" type="teststop" indexed="true" stored="true"/>
|
||||||
|
<field name="lowertok" type="lowertok" indexed="true" stored="true"/>
|
||||||
|
<field name="standardtok" type="standardtok" indexed="true" stored="true"/>
|
||||||
|
<field name="HTMLstandardtok" type="HTMLstandardtok" indexed="true" stored="true"/>
|
||||||
|
<field name="lettertok" type="lettertok" indexed="true" stored="true"/>
|
||||||
|
<field name="whitetok" type="whitetok" indexed="true" stored="true"/>
|
||||||
|
<field name="HTMLwhitetok" type="HTMLwhitetok" indexed="true" stored="true"/>
|
||||||
|
<field name="standardtokfilt" type="standardtokfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="standardfilt" type="standardfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="lowerfilt" type="lowerfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="porterfilt" type="porterfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="engporterfilt" type="engporterfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="custengporterfilt" type="custengporterfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="stopfilt" type="stopfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="custstopfilt" type="custstopfilt" indexed="true" stored="true"/>
|
||||||
|
<field name="lengthfilt" type="lengthfilt" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<field name="subword" type="subword" indexed="true" stored="true"/>
|
||||||
|
<field name="sku1" type="skutype1" indexed="true" stored="true"/>
|
||||||
|
<field name="sku2" type="skutype2" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<field name="textgap" type="textgap" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<!-- Dynamic field definitions. If a field name is not found, dynamicFields
|
||||||
|
will be used if the name matches any of the patterns.
|
||||||
|
RESTRICTION: the glob-like pattern in the name attribute must have
|
||||||
|
a "*" only at the start or the end.
|
||||||
|
EXAMPLE: name="*_i" will match any field ending in _i (like myid_i, z_i)
|
||||||
|
Longer patterns will be matched first. if equal size patterns
|
||||||
|
both match, the first appearing in the schema will be used.
|
||||||
|
-->
|
||||||
|
<dynamicField name="*_i" type="sint" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_l" type="slong" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_t" type="text" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_f" type="sfloat" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_d" type="sdouble" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*_bcd" type="bcdstr" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
<dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
|
||||||
|
<dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
|
||||||
|
<dynamicField name="t_*" type="text" indexed="true" stored="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- for testing to ensure that longer patterns are matched first -->
|
||||||
|
<dynamicField name="*aa" type="string" indexed="true" stored="true"/>
|
||||||
|
<dynamicField name="*aaa" type="integer" indexed="false" stored="true"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</fields>
|
||||||
|
|
||||||
|
<defaultSearchField>text</defaultSearchField>
|
||||||
|
<uniqueKey>id</uniqueKey>
|
||||||
|
|
||||||
|
<!-- copyField commands copy one field to another at the time a document
|
||||||
|
is added to the index. It's used either to index the same field different
|
||||||
|
ways, or to add multiple fields to the same field for easier/faster searching.
|
||||||
|
-->
|
||||||
|
<copyField source="title" dest="title_stemmed"/>
|
||||||
|
<copyField source="title" dest="title_lettertok"/>
|
||||||
|
|
||||||
|
<copyField source="title" dest="text"/>
|
||||||
|
<copyField source="subject" dest="text"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Similarity is the scoring routine for each document vs a query.
|
||||||
|
A custom similarity may be specified here, but the default is fine
|
||||||
|
for most applications.
|
||||||
|
-->
|
||||||
|
<!-- <similarity class="org.apache.lucene.search.DefaultSimilarity"/> -->
|
||||||
|
|
||||||
|
</schema>
|
|
@ -0,0 +1,191 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<!-- $Id: solrconfig.xml 382610 2006-03-03 01:43:03Z yonik $
|
||||||
|
$Source$
|
||||||
|
$Name$
|
||||||
|
-->
|
||||||
|
|
||||||
|
<config>
|
||||||
|
|
||||||
|
<!-- Used to specify an alternate directory to hold all index data.
|
||||||
|
It defaults to "index" if not present, and should probably
|
||||||
|
not be changed if replication is in use. -->
|
||||||
|
<!--
|
||||||
|
<indexDir>index</indexDir>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<indexDefaults>
|
||||||
|
<!-- Values here affect all index writers and act as a default
|
||||||
|
unless overridden. -->
|
||||||
|
<useCompoundFile>false</useCompoundFile>
|
||||||
|
<mergeFactor>10</mergeFactor>
|
||||||
|
<maxBufferedDocs>1000</maxBufferedDocs>
|
||||||
|
<maxMergeDocs>2147483647</maxMergeDocs>
|
||||||
|
<maxFieldLength>10000</maxFieldLength>
|
||||||
|
|
||||||
|
<!-- these are global... can't currently override per index -->
|
||||||
|
<writeLockTimeout>1000</writeLockTimeout>
|
||||||
|
<commitLockTimeout>10000</commitLockTimeout>
|
||||||
|
|
||||||
|
</indexDefaults>
|
||||||
|
|
||||||
|
<mainIndex>
|
||||||
|
<!-- lucene options specific to the main on-disk lucene index -->
|
||||||
|
<useCompoundFile>false</useCompoundFile>
|
||||||
|
<mergeFactor>10</mergeFactor>
|
||||||
|
<maxBufferedDocs>1000</maxBufferedDocs>
|
||||||
|
<maxMergeDocs>2147483647</maxMergeDocs>
|
||||||
|
<maxFieldLength>10000</maxFieldLength>
|
||||||
|
|
||||||
|
<unlockOnStartup>true</unlockOnStartup>
|
||||||
|
</mainIndex>
|
||||||
|
|
||||||
|
<updateHandler class="solr.DirectUpdateHandler2">
|
||||||
|
|
||||||
|
<!-- autocommit pending docs if certain criteria are met -->
|
||||||
|
<autocommit> <!-- NOTE: autocommit not implemented yet -->
|
||||||
|
<maxDocs>10000</maxDocs>
|
||||||
|
<maxSec>3600</maxSec>
|
||||||
|
</autocommit>
|
||||||
|
|
||||||
|
<!-- represents a lower bound on the frequency that commits may
|
||||||
|
occur (in seconds). NOTE: not yet implemented
|
||||||
|
-->
|
||||||
|
<commitIntervalLowerBound>0</commitIntervalLowerBound>
|
||||||
|
|
||||||
|
<!-- The RunExecutableListener executes an external command.
|
||||||
|
exe - the name of the executable to run
|
||||||
|
dir - dir to use as the current working directory. default="."
|
||||||
|
wait - the calling thread waits until the executable returns. default="true"
|
||||||
|
args - the arguments to pass to the program. default=nothing
|
||||||
|
env - environment variables to set. default=nothing
|
||||||
|
-->
|
||||||
|
<!-- A postCommit event is fired after every commit
|
||||||
|
<listener event="postCommit" class="solr.RunExecutableListener">
|
||||||
|
<str name="exe">/var/opt/resin3/__PORT__/scripts/solr/snapshooter</str>
|
||||||
|
<str name="dir">/var/opt/resin3/__PORT__</str>
|
||||||
|
<bool name="wait">true</bool>
|
||||||
|
<arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
|
||||||
|
<arr name="env"> <str>MYVAR=val1</str> </arr>
|
||||||
|
</listener>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
</updateHandler>
|
||||||
|
|
||||||
|
|
||||||
|
<query>
|
||||||
|
<!-- Maximum number of clauses in a boolean query... can affect
|
||||||
|
range or wildcard queries that expand to big boolean
|
||||||
|
queries. An exception is thrown if exceeded.
|
||||||
|
-->
|
||||||
|
<maxBooleanClauses>1024</maxBooleanClauses>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Cache specification for Filters or DocSets - unordered set of *all* documents
|
||||||
|
that match a particular query.
|
||||||
|
-->
|
||||||
|
<filterCache
|
||||||
|
class="solr.search.LRUCache"
|
||||||
|
size="512"
|
||||||
|
initialSize="512"
|
||||||
|
autowarmCount="256"/>
|
||||||
|
|
||||||
|
<queryResultCache
|
||||||
|
class="solr.search.LRUCache"
|
||||||
|
size="512"
|
||||||
|
initialSize="512"
|
||||||
|
autowarmCount="1024"/>
|
||||||
|
|
||||||
|
<documentCache
|
||||||
|
class="solr.search.LRUCache"
|
||||||
|
size="512"
|
||||||
|
initialSize="512"
|
||||||
|
autowarmCount="0"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<cache name="myUserCache"
|
||||||
|
class="solr.search.LRUCache"
|
||||||
|
size="4096"
|
||||||
|
initialSize="1024"
|
||||||
|
autowarmCount="1024"
|
||||||
|
regenerator="MyRegenerator"
|
||||||
|
/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<useFilterForSortedQuery>true</useFilterForSortedQuery>
|
||||||
|
|
||||||
|
<queryResultWindowSize>10</queryResultWindowSize>
|
||||||
|
|
||||||
|
<HashDocSet maxSize="3000" loadFactor="0.75"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- boolToFilterOptimizer converts boolean clauses with zero boost
|
||||||
|
into cached filters if the number of docs selected by the clause exceeds
|
||||||
|
the threshold (represented as a fraction of the total index)
|
||||||
|
-->
|
||||||
|
<boolTofilterOptimizer enabled="true" cacheSize="32" threshold=".05"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- a newSearcher event is fired whenever a new searcher is being prepared
|
||||||
|
and there is a current searcher handling requests (aka registered). -->
|
||||||
|
<!-- QuerySenderListener takes an array of NamedList and executes a
|
||||||
|
local query request for each NamedList in sequence. -->
|
||||||
|
<!--
|
||||||
|
<listener event="newSearcher" class="solr.QuerySenderListener">
|
||||||
|
<arr name="queries">
|
||||||
|
<lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
|
||||||
|
<lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
|
||||||
|
</arr>
|
||||||
|
</listener>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- a firstSearcher event is fired whenever a new searcher is being
|
||||||
|
prepared but there is no current registered searcher to handle
|
||||||
|
requests or to gain prewarming data from. -->
|
||||||
|
<!--
|
||||||
|
<listener event="firstSearcher" class="solr.QuerySenderListener">
|
||||||
|
<arr name="queries">
|
||||||
|
<lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
|
||||||
|
</arr>
|
||||||
|
</listener>
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
</query>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
|
||||||
|
If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
|
||||||
|
based HashBitset. -->
|
||||||
|
|
||||||
|
<!-- requestHandler plugins... incoming queries will be dispatched to the
|
||||||
|
correct handler based on the qt (query type) param matching the
|
||||||
|
name of registered handlers.
|
||||||
|
The "standard" request handler is the default and will be used if qt
|
||||||
|
is not specified in the request.
|
||||||
|
-->
|
||||||
|
<requestHandler name="standard" class="solr.StandardRequestHandler" />
|
||||||
|
<requestHandler name="old" class="solr.tst.OldRequestHandler" >
|
||||||
|
<int name="myparam">1000</int>
|
||||||
|
<float name="ratio">1.4142135</float>
|
||||||
|
<arr name="myarr"><int>1</int><int>2</int></arr>
|
||||||
|
<str>foo</str>
|
||||||
|
</requestHandler>
|
||||||
|
<requestHandler name="oldagain" class="solr.tst.OldRequestHandler" >
|
||||||
|
<lst name="lst1"> <str name="op">sqrt</str> <int name="val">2</int> </lst>
|
||||||
|
<lst name="lst2"> <str name="op">log</str> <float name="val">10</float> </lst>
|
||||||
|
</requestHandler>
|
||||||
|
|
||||||
|
<requestHandler name="test" class="solr.tst.TestRequestHandler" />
|
||||||
|
|
||||||
|
|
||||||
|
<admin>
|
||||||
|
<defaultQuery>solr</defaultQuery>
|
||||||
|
<gettableFiles>solrconfig.xml scheam.xml</gettableFiles>
|
||||||
|
</admin>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</config>
|
|
@ -0,0 +1,2 @@
|
||||||
|
stopworda
|
||||||
|
stopwordb
|
|
@ -0,0 +1,6 @@
|
||||||
|
a => aa
|
||||||
|
b => b1 b2
|
||||||
|
c => c1,c2
|
||||||
|
a\=>a => b\=>b
|
||||||
|
a\,a => b\,b
|
||||||
|
foo,bar,baz
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Striped down solrconfig used by SampleTest to demonstrate picking any
|
||||||
|
config filename you want.
|
||||||
|
|
||||||
|
$Id: solrconfig.xml 382610 2006-03-03 01:43:03Z yonik $
|
||||||
|
$Source$
|
||||||
|
-->
|
||||||
|
|
||||||
|
<config>
|
||||||
|
<indexDefaults>
|
||||||
|
<useCompoundFile>false</useCompoundFile>
|
||||||
|
<mergeFactor>10</mergeFactor>
|
||||||
|
<maxBufferedDocs>1000</maxBufferedDocs>
|
||||||
|
<maxMergeDocs>2147483647</maxMergeDocs>
|
||||||
|
<maxFieldLength>10000</maxFieldLength>
|
||||||
|
<writeLockTimeout>1000</writeLockTimeout>
|
||||||
|
<commitLockTimeout>10000</commitLockTimeout>
|
||||||
|
</indexDefaults>
|
||||||
|
|
||||||
|
<mainIndex>
|
||||||
|
<useCompoundFile>false</useCompoundFile>
|
||||||
|
<mergeFactor>10</mergeFactor>
|
||||||
|
<maxBufferedDocs>1000</maxBufferedDocs>
|
||||||
|
<maxMergeDocs>2147483647</maxMergeDocs>
|
||||||
|
<maxFieldLength>10000</maxFieldLength>
|
||||||
|
<unlockOnStartup>true</unlockOnStartup>
|
||||||
|
</mainIndex>
|
||||||
|
|
||||||
|
<updateHandler class="solr.DirectUpdateHandler2">
|
||||||
|
<commitIntervalLowerBound>0</commitIntervalLowerBound>
|
||||||
|
</updateHandler>
|
||||||
|
|
||||||
|
|
||||||
|
<query>
|
||||||
|
<maxBooleanClauses>1024</maxBooleanClauses>
|
||||||
|
<useFilterForSortedQuery>true</useFilterForSortedQuery>
|
||||||
|
<queryResultWindowSize>10</queryResultWindowSize>
|
||||||
|
<HashDocSet maxSize="3000" loadFactor="0.75"/>
|
||||||
|
<boolTofilterOptimizer enabled="true" cacheSize="32" threshold=".05"/>
|
||||||
|
</query>
|
||||||
|
<requestHandler name="standard" class="solr.StandardRequestHandler" />
|
||||||
|
<requestHandler name="crazy_custom_qt" class="solr.StandardRequestHandler" />
|
||||||
|
|
||||||
|
<admin>
|
||||||
|
<defaultQuery>solr</defaultQuery>
|
||||||
|
<gettableFiles>solrconfig.xml scheam.xml</gettableFiles>
|
||||||
|
</admin>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</config>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!--
|
||||||
|
Striped down schema used by SampleTest to demonstrate picking any
|
||||||
|
schema filename you want.
|
||||||
|
|
||||||
|
$Id: schema.xml 382610 2006-03-03 01:43:03Z yonik $
|
||||||
|
$Source: /cvs/main/searching/solr-configs/test/WEB-INF/classes/schema.xml,v $
|
||||||
|
-->
|
||||||
|
|
||||||
|
<schema name="test" version="1.0">
|
||||||
|
<types>
|
||||||
|
<fieldtype name="sint" class="solr.SortableIntField" />
|
||||||
|
<fieldtype name="text" class="solr.TextField">
|
||||||
|
<analyzer>
|
||||||
|
<tokenizer class="solr.StandardTokenizerFactory"/>
|
||||||
|
<filter class="solr.StandardFilterFactory"/>
|
||||||
|
<filter class="solr.LowerCaseFilterFactory"/>
|
||||||
|
<filter class="solr.StopFilterFactory"/>
|
||||||
|
<filter class="solr.EnglishPorterFilterFactory"/>
|
||||||
|
</analyzer>
|
||||||
|
</fieldtype>
|
||||||
|
</types>
|
||||||
|
|
||||||
|
|
||||||
|
<fields>
|
||||||
|
<field name="id" type="sint" indexed="true" stored="true"/>
|
||||||
|
<field name="subject" type="text" indexed="true" stored="true"/>
|
||||||
|
</fields>
|
||||||
|
|
||||||
|
<defaultSearchField>subject</defaultSearchField>
|
||||||
|
<uniqueKey>id</uniqueKey>
|
||||||
|
</schema>
|
Loading…
Reference in New Issue