You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/05/09 17:24:23 UTC
svn commit: r1101062 [18/21] - in /lucene/dev/branches/bulkpostings: ./
dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/
dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/db/bdb-je/
dev-tools/idea/lucene/contrib/db/bdb/ dev-tools/idea...
Modified: lucene/dev/branches/bulkpostings/solr/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/build.xml Mon May 9 15:24:04 2011
@@ -120,7 +120,7 @@
<!-- Compile the project. -->
<target name="compile"
description="Compile the source code."
- depends="validate-solr, compile-solrj">
+ depends="compile-solrj">
<solr-javac destdir="${dest}/solr"
classpathref="compile.classpath.solrj">
@@ -394,7 +394,7 @@
<!-- Run contrib unit tests. -->
<target name="test"
description="Runs the core unit tests."
- depends="test-core, test-contrib, test-jsp" />
+ depends="validate-solr, test-core, test-contrib, test-jsp" />
<target name="junit" depends="compileTests,junit-mkdir,junit-sequential,junit-parallel"/>
@@ -450,6 +450,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
@@ -1020,7 +1021,7 @@
jar.file="lib/commons-csv-1.0-SNAPSHOT-r966014.jar" />
<m2-deploy-with-pom-template pom.xml="lib/apache-solr-noggit-pom.xml.template"
- jar.file="lib/apache-solr-noggit-r944541.jar" />
+ jar.file="lib/apache-solr-noggit-r1099557.jar" />
<m2-deploy-with-pom-template pom.xml="contrib/uima/lib/solr-uima-an-alchemy-pom.xml.template"
jar.file="contrib/uima/lib/uima-an-alchemy-2.3.1-SNAPSHOT-r1062868.jar" />
Modified: lucene/dev/branches/bulkpostings/solr/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/common-build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/common-build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/common-build.xml Mon May 9 15:24:04 2011
@@ -61,6 +61,7 @@
</condition>
<property name="tests.multiplier" value="1" />
+ <property name="tests.codecprovider" value="random" />
<property name="tests.codec" value="randomPerField" />
<property name="tests.locale" value="random" />
<property name="tests.timezone" value="random" />
Modified: lucene/dev/branches/bulkpostings/solr/contrib/analysis-extras/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/analysis-extras/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/analysis-extras/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/analysis-extras/build.xml Mon May 9 15:24:04 2011
@@ -146,6 +146,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/clustering/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/clustering/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/clustering/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/clustering/build.xml Mon May 9 15:24:04 2011
@@ -118,6 +118,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/build.xml Mon May 9 15:24:04 2011
@@ -171,6 +171,7 @@
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
<sysproperty key="tests.multiplier" value="${tests.multiplier}"/>
@@ -231,6 +232,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java Mon May 9 15:24:04 2011
@@ -194,7 +194,7 @@ public class DataImportHandler extends R
IMPORT_CMD.equals(command)) {
UpdateRequestProcessorChain processorChain =
- req.getCore().getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+ req.getCore().getUpdateProcessingChain(params.get(UpdateParams.UPDATE_CHAIN));
UpdateRequestProcessor processor = processorChain.createProcessor(req, rsp);
SolrResourceLoader loader = req.getCore().getResourceLoader();
SolrWriter sw = getSolrWriter(processor, loader, requestParams, req);
Modified: lucene/dev/branches/bulkpostings/solr/contrib/extraction/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/extraction/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/extraction/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/extraction/build.xml Mon May 9 15:24:04 2011
@@ -115,6 +115,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/CHANGES.txt?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/CHANGES.txt (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/CHANGES.txt Mon May 9 15:24:04 2011
@@ -21,11 +21,30 @@ $Id$
================== 3.2.0-dev ==================
+Upgrading from Solr 3.1
+----------------------
+
+* <uimaConfig/> just beneath <config> ... </config> is no longer supported.
+ It should move to UIMAUpdateRequestProcessorFactory setting.
+ See contrib/uima/README.txt for more details. (SOLR-2436)
+
+New Features
+----------------------
+
+* SOLR-2503: extend mapping function to map feature value to dynamicField. (koji)
+
Test Cases:
+----------------------
+
+* SOLR-2387: add mock annotators for improved testing,
+ (Tommaso Teofili via rmuir)
+
+Other Changes
+----------------------
- * SOLR-2387: add mock annotators for improved testing,
- (Tommaso Teofili via rmuir)
+* SOLR-2436: move uimaConfig to under the uima's update processor in solrconfig.xml.
+ (Tommaso Teofili, koji)
-================== 3.1.0-dev ==================
+================== 3.1.0 ==================
Initial Release
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/README.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/README.txt?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/README.txt (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/README.txt Mon May 9 15:24:04 2011
@@ -3,38 +3,67 @@ Getting Started
To start using Solr UIMA Metadata Extraction Library you should go through the following configuration steps:
1. copy generated solr-uima jar and its libs (under contrib/uima/lib) inside a Solr libraries directory.
+ or set <lib/> tags in solrconfig.xml appropriately to point those jar files.
+
+ <lib dir="../../contrib/uima/lib" />
+ <lib dir="../../dist/" regex="apache-solr-uima-\d.*\.jar" />
2. modify your schema.xml adding the fields you want to be hold metadata specifying proper values for type, indexed, stored and multiValued options:
-3. for example you could specify the following
+ for example you could specify the following
+
<field name="language" type="string" indexed="true" stored="true" required="false"/>
<field name="concept" type="string" indexed="true" stored="true" multiValued="true" required="false"/>
<field name="sentence" type="text" indexed="true" stored="true" multiValued="true" required="false" />
-4. modify your solrconfig.xml adding the following snippet:
- <uimaConfig>
- <runtimeParameters>
- <keyword_apikey>VALID_ALCHEMYAPI_KEY</keyword_apikey>
- <concept_apikey>VALID_ALCHEMYAPI_KEY</concept_apikey>
- <lang_apikey>VALID_ALCHEMYAPI_KEY</lang_apikey>
- <cat_apikey>VALID_ALCHEMYAPI_KEY</cat_apikey>
- <entities_apikey>VALID_ALCHEMYAPI_KEY</entities_apikey>
- <oc_licenseID>VALID_OPENCALAIS_KEY</oc_licenseID>
- </runtimeParameters>
- <analysisEngine>/org/apache/uima/desc/OverridingParamsExtServicesAE.xml</analysisEngine>
- <analyzeFields merge="false">text</analyzeFields>
- <fieldMapping>
- <type name="org.apache.uima.alchemy.ts.concept.ConceptFS">
- <map feature="text" field="concept"/>
- </type>
- <type name="org.apache.uima.alchemy.ts.language.LanguageFS">
- <map feature="language" field="language"/>
- </type>
- <type name="org.apache.uima.SentenceAnnotation">
- <map feature="coveredText" field="sentence"/>
- </type>
- </fieldMapping>
- </uimaConfig>
+3. modify your solrconfig.xml adding the following snippet:
+
+ <updateRequestProcessorChain name="uima">
+ <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+ <lst name="uimaConfig">
+ <lst name="runtimeParameters">
+ <str name="keyword_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="concept_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="lang_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="cat_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="entities_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="oc_licenseID">VALID_OPENCALAIS_KEY</str>
+ </lst>
+ <str name="analysisEngine">/org/apache/uima/desc/OverridingParamsExtServicesAE.xml</str>
+ <lst name="analyzeFields">
+ <bool name="merge">false</bool>
+ <arr name="fields">
+ <str>text</str>
+ </arr>
+ </lst>
+ <lst name="fieldMappings">
+ <lst name="type">
+ <str name="name">org.apache.uima.alchemy.ts.concept.ConceptFS</str>
+ <lst name="mapping">
+ <str name="feature">text</str>
+ <str name="field">concept</str>
+ </lst>
+ </lst>
+ <lst name="type">
+ <str name="name">org.apache.uima.alchemy.ts.language.LanguageFS</str>
+ <lst name="mapping">
+ <str name="feature">language</str>
+ <str name="field">language</str>
+ </lst>
+ </lst>
+ <lst name="type">
+ <str name="name">org.apache.uima.SentenceAnnotation</str>
+ <lst name="mapping">
+ <str name="feature">coveredText</str>
+ <str name="field">sentence</str>
+ </lst>
+ </lst>
+ </lst>
+ </lst>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
where VALID_ALCHEMYAPI_KEY is your AlchemyAPI Access Key. You need to register AlchemyAPI Access
key to exploit the AlchemyAPI services: http://www.alchemyapi.com/api/register.html
@@ -42,21 +71,14 @@ To start using Solr UIMA Metadata Extrac
where VALID_OPENCALAIS_KEY is your Calais Service Key. You need to register Calais Service
key to exploit the Calais services: http://www.opencalais.com/apikey
-5. the analysisEngine tag must contain an AE descriptor inside the specified path in the classpath
+ the analysisEngine must contain an AE descriptor inside the specified path in the classpath
-6. the analyzeFields tag must contain the input fields that need to be analyzed by UIMA,
+ the analyzeFields must contain the input fields that need to be analyzed by UIMA,
if merge=true then their content will be merged and analyzed only once
-7. field mapping describes which features of which types should go in a field
-
-8. define in your solrconfig.xml an UpdateRequestProcessorChain as following:
- <updateRequestProcessorChain name="uima">
- <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory"/>
- <processor class="solr.LogUpdateProcessorFactory" />
- <processor class="solr.RunUpdateProcessorFactory" />
- </updateRequestProcessorChain>
+ field mapping describes which features of which types should go in a field
-9. in your solrconfig.xml replace the existing default (<requestHandler name="/update"...) or create a new UpdateRequestHandler with the following:
+4. in your solrconfig.xml replace the existing default (<requestHandler name="/update"...) or create a new UpdateRequestHandler with the following:
<requestHandler name="/update" class="solr.XmlUpdateRequestHandler">
<lst name="defaults">
<str name="update.processor">uima</str>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/build.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/build.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/build.xml Mon May 9 15:24:04 2011
@@ -114,6 +114,7 @@
>
<sysproperty key="java.util.logging.config.file" value="${common-solr.dir}/testlogging.properties"/>
<sysproperty key="tests.luceneMatchVersion" value="${tests.luceneMatchVersion}"/>
+ <sysproperty key="tests.codecprovider" value="${tests.codecprovider}"/>
<sysproperty key="tests.codec" value="${tests.codec}"/>
<sysproperty key="tests.locale" value="${tests.locale}"/>
<sysproperty key="tests.timezone" value="${tests.timezone}"/>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfiguration.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfiguration.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfiguration.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfiguration.java Mon May 9 15:24:04 2011
@@ -21,7 +21,7 @@ import java.util.Map;
/**
* Configuration holding all the configurable parameters for calling UIMA inside Solr
- *
+ *
* @version $Id$
*/
public class SolrUIMAConfiguration {
@@ -30,14 +30,14 @@ public class SolrUIMAConfiguration {
private boolean fieldsMerging;
- private Map<String, Map<String, String>> typesFeaturesFieldsMapping;
+ private Map<String, Map<String, MapField>> typesFeaturesFieldsMapping;
private String aePath;
private Map<String, Object> runtimeParameters;
public SolrUIMAConfiguration(String aePath, String[] fieldsToAnalyze, boolean fieldsMerging,
- Map<String, Map<String, String>> typesFeaturesFieldsMapping,
+ Map<String, Map<String, MapField>> typesFeaturesFieldsMapping,
Map<String, Object> runtimeParameters) {
this.aePath = aePath;
this.fieldsToAnalyze = fieldsToAnalyze;
@@ -54,7 +54,7 @@ public class SolrUIMAConfiguration {
return fieldsMerging;
}
- public Map<String, Map<String, String>> getTypesFeaturesFieldsMapping() {
+ public Map<String, Map<String, MapField>> getTypesFeaturesFieldsMapping() {
return typesFeaturesFieldsMapping;
}
@@ -65,5 +65,39 @@ public class SolrUIMAConfiguration {
public Map<String, Object> getRuntimeParameters() {
return runtimeParameters;
}
-
+
+ static final class MapField {
+
+ private String fieldName, fieldNameFeature;
+ private boolean prefix; // valid if dynamicField == true
+ // false: *_s, true: s_*
+
+ MapField(String fieldName, String fieldNameFeature){
+ this.fieldName = fieldName;
+ this.fieldNameFeature = fieldNameFeature;
+ if(fieldNameFeature != null){
+ if(fieldName.startsWith("*")){
+ prefix = false;
+ this.fieldName = fieldName.substring(1);
+ }
+ else if(fieldName.endsWith("*")){
+ prefix = true;
+ this.fieldName = fieldName.substring(0, fieldName.length() - 1);
+ }
+ else
+ throw new RuntimeException("static field name cannot be used for dynamicField");
+ }
+ }
+
+ String getFieldNameFeature(){
+ return fieldNameFeature;
+ }
+
+ String getFieldName(String featureValue){
+ if(fieldNameFeature != null){
+ return prefix ? fieldName + featureValue : featureValue + fieldName;
+ }
+ return fieldName;
+ }
+ }
}
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/SolrUIMAConfigurationReader.java Mon May 9 15:24:04 2011
@@ -18,11 +18,11 @@ package org.apache.solr.uima.processor;
*/
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import org.apache.solr.core.SolrConfig;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.uima.processor.SolrUIMAConfiguration.MapField;
/**
* Read configuration for Solr-UIMA integration
@@ -32,18 +32,10 @@ import org.w3c.dom.NodeList;
*/
public class SolrUIMAConfigurationReader {
- private static final String AE_RUNTIME_PARAMETERS_NODE_PATH = "/config/uimaConfig/runtimeParameters";
+ private NamedList<Object> args;
- private static final String FIELD_MAPPING_NODE_PATH = "/config/uimaConfig/fieldMapping";
-
- private static final String ANALYZE_FIELDS_NODE_PATH = "/config/uimaConfig/analyzeFields";
-
- private static final String ANALYSIS_ENGINE_NODE_PATH = "/config/uimaConfig/analysisEngine";
-
- private SolrConfig solrConfig;
-
- public SolrUIMAConfigurationReader(SolrConfig solrConfig) {
- this.solrConfig = solrConfig;
+ public SolrUIMAConfigurationReader(NamedList<Object> args) {
+ this.args = args;
}
public SolrUIMAConfiguration readSolrUIMAConfiguration() {
@@ -52,73 +44,64 @@ public class SolrUIMAConfigurationReader
}
private String readAEPath() {
- return solrConfig.getNode(ANALYSIS_ENGINE_NODE_PATH, true).getTextContent();
+ return (String) args.get("analysisEngine");
+ }
+
+ @SuppressWarnings("rawtypes")
+ private NamedList getAnalyzeFields() {
+ return (NamedList) args.get("analyzeFields");
}
+ @SuppressWarnings("unchecked")
private String[] readFieldsToAnalyze() {
- Node analyzeFieldsNode = solrConfig.getNode(ANALYZE_FIELDS_NODE_PATH, true);
- return analyzeFieldsNode.getTextContent().split(",");
+ List<String> fields = (List<String>) getAnalyzeFields().get("fields");
+ return fields.toArray(new String[fields.size()]);
}
private boolean readFieldsMerging() {
- Node analyzeFieldsNode = solrConfig.getNode(ANALYZE_FIELDS_NODE_PATH, true);
- Node mergeNode = analyzeFieldsNode.getAttributes().getNamedItem("merge");
- return Boolean.valueOf(mergeNode.getNodeValue());
+ return (Boolean) getAnalyzeFields().get("merge");
}
- private Map<String, Map<String, String>> readTypesFeaturesFieldsMapping() {
- Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
+ @SuppressWarnings("rawtypes")
+ private Map<String, Map<String, MapField>> readTypesFeaturesFieldsMapping() {
+ Map<String, Map<String, MapField>> map = new HashMap<String, Map<String, MapField>>();
- Node fieldMappingNode = solrConfig.getNode(FIELD_MAPPING_NODE_PATH, true);
+ NamedList fieldMappings = (NamedList) args.get("fieldMappings");
/* iterate over UIMA types */
- if (fieldMappingNode.hasChildNodes()) {
- NodeList typeNodes = fieldMappingNode.getChildNodes();
- for (int i = 0; i < typeNodes.getLength(); i++) {
- /* <type> node */
- Node typeNode = typeNodes.item(i);
- if (typeNode.getNodeType() != Node.TEXT_NODE) {
- Node typeNameAttribute = typeNode.getAttributes().getNamedItem("name");
- /* get a UIMA typename */
- String typeName = typeNameAttribute.getNodeValue();
- /* create entry for UIMA type */
- map.put(typeName, new HashMap<String, String>());
- if (typeNode.hasChildNodes()) {
- /* iterate over features */
- NodeList featuresNodeList = typeNode.getChildNodes();
- for (int j = 0; j < featuresNodeList.getLength(); j++) {
- Node mappingNode = featuresNodeList.item(j);
- if (mappingNode.getNodeType() != Node.TEXT_NODE) {
- /* get field name */
- Node fieldNameNode = mappingNode.getAttributes().getNamedItem("field");
- String mappedFieldName = fieldNameNode.getNodeValue();
- /* get feature name */
- Node featureNameNode = mappingNode.getAttributes().getNamedItem("feature");
- String featureName = featureNameNode.getNodeValue();
- /* map the feature to the field for the specified type */
- map.get(typeName).put(featureName, mappedFieldName);
- }
- }
- }
+ for (int i = 0; i < fieldMappings.size(); i++) {
+ NamedList type = (NamedList) fieldMappings.get("type", i);
+ String typeName = (String)type.get("name");
+
+ Map<String, MapField> subMap = new HashMap<String, MapField>();
+ /* iterate over mapping definitions */
+ for(int j = 0; j < type.size() - 1; j++){
+ NamedList mapping = (NamedList) type.get("mapping", j + 1);
+ String featureName = (String) mapping.get("feature");
+ String fieldNameFeature = null;
+ String mappedFieldName = (String) mapping.get("field");
+ if(mappedFieldName == null){
+ fieldNameFeature = (String) mapping.get("fieldNameFeature");
+ mappedFieldName = (String) mapping.get("dynamicField");
}
+ if(mappedFieldName == null)
+ throw new RuntimeException("either of field or dynamicField should be defined for feature " + featureName);
+ MapField mapField = new MapField(mappedFieldName, fieldNameFeature);
+ subMap.put(featureName, mapField);
}
+ map.put(typeName, subMap);
}
return map;
}
+ @SuppressWarnings("rawtypes")
private Map<String, Object> readAEOverridingParameters() {
Map<String, Object> runtimeParameters = new HashMap<String, Object>();
- Node uimaConfigNode = solrConfig.getNode(AE_RUNTIME_PARAMETERS_NODE_PATH, true);
-
- if (uimaConfigNode.hasChildNodes()) {
- NodeList overridingNodes = uimaConfigNode.getChildNodes();
- for (int i = 0; i < overridingNodes.getLength(); i++) {
- Node overridingNode = overridingNodes.item(i);
- if (overridingNode.getNodeType() != Node.TEXT_NODE && overridingNode.getNodeType() != Node.COMMENT_NODE) {
- runtimeParameters.put(overridingNode.getNodeName(), overridingNode.getTextContent());
- }
- }
+ NamedList runtimeParams = (NamedList) args.get("runtimeParameters");
+ for (int i = 0; i < runtimeParams.size(); i++) {
+ String name = runtimeParams.getName(i);
+ Object value = runtimeParams.getVal(i);
+ runtimeParameters.put(name, value);
}
-
return runtimeParameters;
}
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAToSolrMapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAToSolrMapper.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAToSolrMapper.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAToSolrMapper.java Mon May 9 15:24:04 2011
@@ -20,6 +20,7 @@ package org.apache.solr.uima.processor;
import java.util.Map;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.uima.processor.SolrUIMAConfiguration.MapField;
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.Type;
@@ -53,7 +54,7 @@ public class UIMAToSolrMapper {
* name of UIMA type to map
* @param featureFieldsmapping
*/
- public void map(String typeName, Map<String, String> featureFieldsmapping) {
+ public void map(String typeName, Map<String, MapField> featureFieldsmapping) {
try {
FeatureStructure fsMock = (FeatureStructure) Class.forName(typeName).getConstructor(
JCas.class).newInstance(cas);
@@ -62,7 +63,11 @@ public class UIMAToSolrMapper {
.hasNext();) {
FeatureStructure fs = iterator.next();
for (String featureName : featureFieldsmapping.keySet()) {
- String fieldName = featureFieldsmapping.get(featureName);
+ MapField mapField = featureFieldsmapping.get(featureName);
+ String fieldNameFeature = mapField.getFieldNameFeature();
+ String fieldNameFeatureValue = fieldNameFeature == null ? null :
+ fs.getFeatureValueAsString(type.getFeatureByBaseName(fieldNameFeature));
+ String fieldName = mapField.getFieldName(fieldNameFeatureValue);
log.info(new StringBuffer("mapping ").append(typeName).append("@").append(featureName)
.append(" to ").append(fieldName).toString());
String featureValue = null;
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessor.java Mon May 9 15:24:04 2011
@@ -22,6 +22,7 @@ import java.util.Map;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.uima.processor.SolrUIMAConfiguration.MapField;
import org.apache.solr.uima.processor.ae.AEProvider;
import org.apache.solr.uima.processor.ae.AEProviderFactory;
import org.apache.solr.update.AddUpdateCommand;
@@ -34,24 +35,23 @@ import org.apache.uima.resource.Resource
/**
* Update document(s) to be indexed with UIMA extracted information
- *
+ *
* @version $Id$
*/
public class UIMAUpdateRequestProcessor extends UpdateRequestProcessor {
- private SolrUIMAConfiguration solrUIMAConfiguration;
+ SolrUIMAConfiguration solrUIMAConfiguration;
private AEProvider aeProvider;
- public UIMAUpdateRequestProcessor(UpdateRequestProcessor next, SolrCore solrCore) {
+ public UIMAUpdateRequestProcessor(UpdateRequestProcessor next, SolrCore solrCore,
+ SolrUIMAConfiguration config) {
super(next);
- initialize(solrCore);
+ initialize(solrCore, config);
}
- private void initialize(SolrCore solrCore) {
- SolrUIMAConfigurationReader uimaConfigurationReader = new SolrUIMAConfigurationReader(solrCore
- .getSolrConfig());
- solrUIMAConfiguration = uimaConfigurationReader.readSolrUIMAConfiguration();
+ private void initialize(SolrCore solrCore, SolrUIMAConfiguration config) {
+ solrUIMAConfiguration = config;
aeProvider = AEProviderFactory.getInstance().getAEProvider(solrCore.getName(),
solrUIMAConfiguration.getAePath(), solrUIMAConfiguration.getRuntimeParameters());
}
@@ -70,7 +70,7 @@ public class UIMAUpdateRequestProcessor
UIMAToSolrMapper uimaToSolrMapper = new UIMAToSolrMapper(solrInputDocument, jcas);
/* get field mapping from config */
- Map<String, Map<String, String>> typesAndFeaturesFieldsMap = solrUIMAConfiguration
+ Map<String, Map<String, MapField>> typesAndFeaturesFieldsMap = solrUIMAConfiguration
.getTypesFeaturesFieldsMapping();
/* map type features on fields */
for (String typeFQN : typesAndFeaturesFieldsMap.keySet()) {
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorFactory.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorFactory.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorFactory.java Mon May 9 15:24:04 2011
@@ -17,6 +17,7 @@ package org.apache.solr.uima.processor;
* limitations under the License.
*/
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.processor.UpdateRequestProcessor;
@@ -29,10 +30,19 @@ import org.apache.solr.update.processor.
*/
public class UIMAUpdateRequestProcessorFactory extends UpdateRequestProcessorFactory {
+ private NamedList<Object> args;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public void init(@SuppressWarnings("rawtypes") NamedList args) {
+ this.args = (NamedList<Object>) args.get("uimaConfig");
+ }
+
@Override
public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp,
UpdateRequestProcessor next) {
- return new UIMAUpdateRequestProcessor(next, req.getCore());
+ return new UIMAUpdateRequestProcessor(next, req.getCore(),
+ new SolrUIMAConfigurationReader(args).readSolrUIMAConfiguration());
}
}
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/resources/solr/conf/aggregate-uima-config.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/resources/solr/conf/aggregate-uima-config.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/resources/solr/conf/aggregate-uima-config.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/main/resources/solr/conf/aggregate-uima-config.xml Mon May 9 15:24:04 2011
@@ -15,19 +15,34 @@
limitations under the License.
-->
-<uimaConfig>
- <runtimeParameters>
- <keyword_apikey>VALID_ALCHEMYAPI_KEY</keyword_apikey>
- <concept_apikey>VALID_ALCHEMYAPI_KEY</concept_apikey>
- <lang_apikey>VALID_ALCHEMYAPI_KEY</lang_apikey>
- <cat_apikey>VALID_ALCHEMYAPI_KEY</cat_apikey>
- <oc_licenseID>VALID_OPENCALAIS_KEY</oc_licenseID>
- </runtimeParameters>
- <analysisEngine>/org/apache/uima/desc/OverridingParamsExtServicesAE.xml</analysisEngine>
- <analyzeFields merge="false">text,title</analyzeFields>
- <fieldMapping>
- <type name="org.apache.uima.jcas.tcas.Annotation">
- <map feature="coveredText" field="tag"/>
- </type>
- </fieldMapping>
-</uimaConfig>
\ No newline at end of file
+ <updateRequestProcessorChain name="uima">
+ <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+ <lst name="uimaConfig">
+ <lst name="runtimeParameters">
+ <str name="keyword_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="concept_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="lang_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="cat_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="entities_apikey">VALID_ALCHEMYAPI_KEY</str>
+ <str name="oc_licenseID">VALID_OPENCALAIS_KEY</str>
+ </lst>
+ <str name="analysisEngine">/org/apache/uima/desc/OverridingParamsExtServicesAE.xml</str>
+ <lst name="analyzeFields">
+ <bool name="merge">false</bool>
+ <arr name="fields">
+ <str>text</str>
+ <str>title</str>
+ </arr>
+ </lst>
+ <lst name="fieldMappings">
+ <lst name="mapping">
+ <str name="type">org.apache.uima.jcas.tcas.Annotation</str>
+ <str name="feature">convertText</str>
+ <str name="field">tag</str>
+ </lst>
+ </lst>
+ </lst>
+ </processor>
+ <processor class="solr.LogUpdateProcessorFactory" />
+ <processor class="solr.RunUpdateProcessorFactory" />
+ </updateRequestProcessorChain>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/UIMAUpdateRequestProcessorTest.java Mon May 9 15:24:04 2011
@@ -33,6 +33,8 @@ import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.XmlUpdateRequestHandler;
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.uima.processor.SolrUIMAConfiguration.MapField;
+import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -66,6 +68,26 @@ public class UIMAUpdateRequestProcessorT
UIMAUpdateRequestProcessorFactory factory = (UIMAUpdateRequestProcessorFactory) chained
.getFactories()[0];
assertNotNull(factory);
+ UpdateRequestProcessor processor = factory.getInstance(req(), null, null);
+ assertTrue(processor instanceof UIMAUpdateRequestProcessor);
+ }
+
+ @Test
+ public void testMultiMap() {
+ SolrCore core = h.getCore();
+ UpdateRequestProcessorChain chained = core.getUpdateProcessingChain("uima-multi-map");
+ assertNotNull(chained);
+ UIMAUpdateRequestProcessorFactory factory = (UIMAUpdateRequestProcessorFactory) chained
+ .getFactories()[0];
+ assertNotNull(factory);
+ UpdateRequestProcessor processor = factory.getInstance(req(), null, null);
+ assertTrue(processor instanceof UIMAUpdateRequestProcessor);
+ SolrUIMAConfiguration conf = ((UIMAUpdateRequestProcessor)processor).solrUIMAConfiguration;
+ Map<String, Map<String, MapField>> map = conf.getTypesFeaturesFieldsMapping();
+ Map<String, MapField> subMap = map.get("a-type-which-can-have-multiple-features");
+ assertEquals(2, subMap.size());
+ assertEquals("1", subMap.get("A").getFieldName(null));
+ assertEquals("2", subMap.get("B").getFieldName(null));
}
@Test
@@ -83,7 +105,7 @@ public class UIMAUpdateRequestProcessorT
assertU(commit());
assertQ(req("sentence:*"), "//*[@numFound='1']");
assertQ(req("sentiment:*"), "//*[@numFound='0']");
- assertQ(req("entity:Prague"), "//*[@numFound='1']");
+ assertQ(req("OTHER_sm:Prague"), "//*[@numFound='1']");
}
@Test
@@ -103,12 +125,12 @@ public class UIMAUpdateRequestProcessorT
assertQ(req("sentence:*"), "//*[@numFound='2']");
assertQ(req("sentiment:positive"), "//*[@numFound='1']");
- assertQ(req("entity:Apache"), "//*[@numFound='2']");
+ assertQ(req("ORGANIZATION_sm:Apache"), "//*[@numFound='2']");
}
private void addDoc(String doc) throws Exception {
Map<String, String[]> params = new HashMap<String, String[]>();
- params.put(UpdateParams.UPDATE_PROCESSOR, new String[] { "uima" });
+ params.put(UpdateParams.UPDATE_CHAIN, new String[] { "uima" });
MultiMapSolrParams mmparams = new MultiMapSolrParams(params);
SolrQueryRequestBase req = new SolrQueryRequestBase(h.getCore(), (SolrParams) mmparams) {
};
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/an/DummyEntityAnnotator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/an/DummyEntityAnnotator.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/an/DummyEntityAnnotator.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/processor/an/DummyEntityAnnotator.java Mon May 9 15:24:04 2011
@@ -34,6 +34,12 @@ public class DummyEntityAnnotator extend
EntityAnnotation entityAnnotation = new EntityAnnotation(jcas);
entityAnnotation.setBegin(annotation.getBegin());
entityAnnotation.setEnd(annotation.getEnd());
+ String entityString = annotation.getCoveredText();
+ entityAnnotation.setEntity(entityString);
+ String name = "OTHER"; // "OTHER" makes no sense. In practice, "PERSON", "COUNTRY", "E-MAIL", etc.
+ if(entityString.equals("Apache"))
+ name = "ORGANIZATION";
+ entityAnnotation.setName(name);
entityAnnotation.addToIndexes();
}
}
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation.java Mon May 9 15:24:04 2011
@@ -1,6 +1,6 @@
-/* First created by JCasGen Fri Mar 04 12:48:08 CET 2011 */
+/* First created by JCasGen Sat May 07 22:33:38 JST 2011 */
package org.apache.solr.uima.ts;
import org.apache.uima.jcas.JCas;
@@ -11,8 +11,8 @@ import org.apache.uima.jcas.tcas.Annotat
/**
- * Updated by JCasGen Fri Mar 04 12:50:14 CET 2011
- * XML source: /Users/tommasoteofili/Documents/workspaces/lucene_workspace/lucene_dev/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml
+ * Updated by JCasGen Sat May 07 22:33:38 JST 2011
+ * XML source: /Users/koji/Documents/workspace/DummyEntityAnnotator/desc/DummyEntityAEDescriptor.xml
* @generated */
public class EntityAnnotation extends Annotation {
/** @generated
@@ -57,6 +57,42 @@ public class EntityAnnotation extends An
@generated modifiable */
private void readObject() {}
-}
+
+
+ //*--------------*
+ //* Feature: name
+
+ /** getter for name - gets
+ * @generated */
+ public String getName() {
+ if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_name == null)
+ jcasType.jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+ return jcasType.ll_cas.ll_getStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_name);}
+
+ /** setter for name - sets
+ * @generated */
+ public void setName(String v) {
+ if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_name == null)
+ jcasType.jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+ jcasType.ll_cas.ll_setStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_name, v);}
+
+
+ //*--------------*
+ //* Feature: entity
+
+ /** getter for entity - gets
+ * @generated */
+ public String getEntity() {
+ if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_entity == null)
+ jcasType.jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+ return jcasType.ll_cas.ll_getStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_entity);}
+
+ /** setter for entity - sets
+ * @generated */
+ public void setEntity(String v) {
+ if (EntityAnnotation_Type.featOkTst && ((EntityAnnotation_Type)jcasType).casFeat_entity == null)
+ jcasType.jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+ jcasType.ll_cas.ll_setStringValue(addr, ((EntityAnnotation_Type)jcasType).casFeatCode_entity, v);}
+ }
\ No newline at end of file
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/java/org/apache/solr/uima/ts/EntityAnnotation_Type.java Mon May 9 15:24:04 2011
@@ -1,5 +1,5 @@
-/* First created by JCasGen Fri Mar 04 12:48:08 CET 2011 */
+/* First created by JCasGen Sat May 07 22:33:38 JST 2011 */
package org.apache.solr.uima.ts;
import org.apache.uima.jcas.JCas;
@@ -9,10 +9,12 @@ import org.apache.uima.cas.impl.FSGenera
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.impl.TypeImpl;
import org.apache.uima.cas.Type;
+import org.apache.uima.cas.impl.FeatureImpl;
+import org.apache.uima.cas.Feature;
import org.apache.uima.jcas.tcas.Annotation_Type;
/**
- * Updated by JCasGen Fri Mar 04 12:50:14 CET 2011
+ * Updated by JCasGen Sat May 07 22:33:38 JST 2011
* @generated */
public class EntityAnnotation_Type extends Annotation_Type {
/** @generated */
@@ -38,6 +40,42 @@ public class EntityAnnotation_Type exten
/** @generated
@modifiable */
public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.solr.uima.ts.EntityAnnotation");
+
+ /** @generated */
+ final Feature casFeat_name;
+ /** @generated */
+ final int casFeatCode_name;
+ /** @generated */
+ public String getName(int addr) {
+ if (featOkTst && casFeat_name == null)
+ jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+ return ll_cas.ll_getStringValue(addr, casFeatCode_name);
+ }
+ /** @generated */
+ public void setName(int addr, String v) {
+ if (featOkTst && casFeat_name == null)
+ jcas.throwFeatMissing("name", "org.apache.solr.uima.ts.EntityAnnotation");
+ ll_cas.ll_setStringValue(addr, casFeatCode_name, v);}
+
+
+
+ /** @generated */
+ final Feature casFeat_entity;
+ /** @generated */
+ final int casFeatCode_entity;
+ /** @generated */
+ public String getEntity(int addr) {
+ if (featOkTst && casFeat_entity == null)
+ jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+ return ll_cas.ll_getStringValue(addr, casFeatCode_entity);
+ }
+ /** @generated */
+ public void setEntity(int addr, String v) {
+ if (featOkTst && casFeat_entity == null)
+ jcas.throwFeatMissing("entity", "org.apache.solr.uima.ts.EntityAnnotation");
+ ll_cas.ll_setStringValue(addr, casFeatCode_entity, v);}
+
+
@@ -47,6 +85,14 @@ public class EntityAnnotation_Type exten
super(jcas, casType);
casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator());
+
+ casFeat_name = jcas.getRequiredFeatureDE(casType, "name", "uima.cas.String", featOkTst);
+ casFeatCode_name = (null == casFeat_name) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_name).getCode();
+
+
+ casFeat_entity = jcas.getRequiredFeatureDE(casType, "entity", "uima.cas.String", featOkTst);
+ casFeatCode_entity = (null == casFeat_entity) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_entity).getCode();
+
}
}
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/DummyEntityAEDescriptor.xml Mon May 9 15:24:04 2011
@@ -32,6 +32,18 @@
<name>org.apache.solr.uima.ts.EntityAnnotation</name>
<description/>
<supertypeName>uima.tcas.Annotation</supertypeName>
+ <features>
+ <featureDescription>
+ <name>name</name>
+ <description/>
+ <rangeTypeName>uima.cas.String</rangeTypeName>
+ </featureDescription>
+ <featureDescription>
+ <name>entity</name>
+ <description/>
+ <rangeTypeName>uima.cas.String</rangeTypeName>
+ </featureDescription>
+ </features>
</typeDescription>
</types>
</typeSystemDescription>
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/schema.xml Mon May 9 15:24:04 2011
@@ -597,6 +597,7 @@
stored="true" multiValued="true"/> <dynamicField name="random_*"
type="random" />
-->
+ <dynamicField name="*_sm" type="string" indexed="true" stored="true" multiValued="true"/>
<!--
uncomment the following to ignore any fields that don't already
match an existing field name or dynamic field, rather than
Modified: lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/contrib/uima/src/test/resources/solr-uima/conf/solrconfig.xml Mon May 9 15:24:04 2011
@@ -295,7 +295,7 @@
<!--
<indexReaderFactory name="IndexReaderFactory"
class="org.apache.solr.core.StandardIndexReaderFactory"> <int
- name="termInfosIndexDivisor">12</int> </indexReaderFactory >
+ name="setTermIndexDivisor">12</int> </indexReaderFactory >
-->
@@ -855,7 +855,7 @@
-->
<requestHandler name="/update" class="solr.XmlUpdateRequestHandler">
<lst name="defaults">
- <str name="update.processor">uima</str>
+ <str name="update.chain">uima</str>
</lst>
</requestHandler>
@@ -953,42 +953,6 @@
</lst>
</requestHandler>
- <highlighting>
- <!-- Configure the standard fragmenter -->
- <!-- This could most likely be commented out in the "default" case -->
- <fragmenter name="gap"
- class="org.apache.solr.highlight.GapFragmenter" default="true">
- <lst name="defaults">
- <int name="hl.fragsize">100</int>
- </lst>
- </fragmenter>
-
- <!--
- A regular-expression-based fragmenter (f.i., for sentence
- extraction)
- -->
- <fragmenter name="regex"
- class="org.apache.solr.highlight.RegexFragmenter">
- <lst name="defaults">
- <!-- slightly smaller fragsizes work better because of slop -->
- <int name="hl.fragsize">70</int>
- <!-- allow 50% slop on fragment sizes -->
- <float name="hl.regex.slop">0.5</float>
- <!-- a basic sentence pattern -->
- <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
- </lst>
- </fragmenter>
-
- <!-- Configure the standard formatter -->
- <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter"
- default="true">
- <lst name="defaults">
- <str name="hl.simple.pre"><![CDATA[<em>]]></str>
- <str name="hl.simple.post"><![CDATA[</em>]]></str>
- </lst>
- </formatter>
- </highlighting>
-
<!--
An example dedup update processor that creates the "id" field on the
fly based on the hash code of some other fields. This example has
@@ -997,16 +961,81 @@
anyway. You have to link the chain to an update handler above to use
it ie: <requestHandler name="/update
"class="solr.XmlUpdateRequestHandler"> <lst name="defaults"> <str
- name="update.processor">dedupe</str> </lst> </requestHandler>
+ name="update.chain">dedupe</str> </lst> </requestHandler>
-->
<updateRequestProcessorChain name="uima">
- <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory"/>
+ <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+ <lst name="uimaConfig">
+ <lst name="runtimeParameters">
+ <int name="ngramsize">3</int>
+ </lst>
+ <str name="analysisEngine">/TestAE.xml</str>
+ <lst name="analyzeFields">
+ <bool name="merge">false</bool>
+ <arr name="fields">
+ <str>text</str>
+ </arr>
+ </lst>
+ <lst name="fieldMappings">
+ <lst name="type">
+ <str name="name">org.apache.uima.SentenceAnnotation</str>
+ <lst name="mapping">
+ <str name="feature">coveredText</str>
+ <str name="field">sentence</str>
+ </lst>
+ </lst>
+ <lst name="type">
+ <str name="name">org.apache.solr.uima.ts.SentimentAnnotation</str>
+ <lst name="mapping">
+ <str name="feature">mood</str>
+ <str name="field">sentiment</str>
+ </lst>
+ </lst>
+ <lst name="type">
+ <str name="name">org.apache.solr.uima.ts.EntityAnnotation</str>
+ <lst name="mapping">
+ <str name="feature">entity</str>
+ <str name="fieldNameFeature">name</str>
+ <str name="dynamicField">*_sm</str>
+ </lst>
+ </lst>
+ </lst>
+ </lst>
+ </processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
-
+ <updateRequestProcessorChain name="uima-multi-map">
+ <processor class="org.apache.solr.uima.processor.UIMAUpdateRequestProcessorFactory">
+ <lst name="uimaConfig">
+ <lst name="runtimeParameters">
+ <int name="ngramsize">3</int>
+ </lst>
+ <str name="analysisEngine">/TestAE.xml</str>
+ <lst name="analyzeFields">
+ <bool name="merge">false</bool>
+ <arr name="fields">
+ <str>text</str>
+ </arr>
+ </lst>
+ <lst name="fieldMappings">
+ <lst name="type">
+ <str name="name">a-type-which-can-have-multiple-features</str>
+ <lst name="mapping">
+ <str name="feature">A</str>
+ <str name="field">1</str>
+ </lst>
+ <lst name="mapping">
+ <str name="feature">B</str>
+ <str name="field">2</str>
+ </lst>
+ </lst>
+ </lst>
+ </lst>
+ </processor>
+ </updateRequestProcessorChain>
<!--
queryResponseWriter plugins... query responses will be written using
@@ -1062,23 +1091,4 @@
-->
</admin>
-<uimaConfig>
- <runtimeParameters>
- <ngramsize>3</ngramsize>
- </runtimeParameters>
- <analysisEngine>/TestAE.xml</analysisEngine>
- <analyzeFields merge="false">text</analyzeFields>
- <fieldMapping>
- <type name="org.apache.uima.SentenceAnnotation">
- <map feature="coveredText" field="sentence"/>
- </type>
- <type name="org.apache.solr.uima.ts.SentimentAnnotation">
- <map feature="mood" field="sentiment"/>
- </type>
- <type name="org.apache.solr.uima.ts.EntityAnnotation">
- <map feature="coveredText" field="entity"/>
- </type>
- </fieldMapping>
-</uimaConfig>
-
</config>
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/solrconfig.xml?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/solrconfig.xml Mon May 9 15:24:04 2011
@@ -774,6 +774,7 @@
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">*,score</str>
+
<str name="mlt.qf">
text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
</str>
@@ -792,6 +793,8 @@
<int name="facet.range.start">0</int>
<int name="facet.range.end">600</int>
<int name="facet.range.gap">50</int>
+ <str name="facet.range">popularity</str>
+ <int name="f.popularity.facet.range.gap">3</int>
<str name="facet.range.other">after</str>
<str name="facet.date">manufacturedate_dt</str>
<str name="facet.date.start">NOW/YEAR-10YEARS</str>
@@ -841,7 +844,7 @@
-->
<!--
<lst name="defaults">
- <str name="update.processor">dedupe</str>
+ <str name="update.chain">dedupe</str>
</lst>
-->
</requestHandler>
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/VM_global_library.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/VM_global_library.vm?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/VM_global_library.vm (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/VM_global_library.vm Mon May 9 15:24:04 2011
@@ -88,13 +88,13 @@
<ul>
#foreach ($facet in $field)
#set($theDate = $date.toDate("yyyy-MM-dd'T'HH:mm:ss'Z'", $facet.key))
- #set($value = '["' + $facet.key + '" TO "' + $facet.key + $gap + '"]')
+ #set($value = '["' + $facet.key + '" TO "' + $facet.key + $gap + '"}')
#set($facetURL = "#url_for_facet_date_filter($fieldName, $value)")
#if ($facetURL != '')
#if ($facet.key != "gap" && $facet.key != "start" && $facet.key != "end" && $facet.key != "before" && $facet.key != "after")
- <li><a href="$facetURL">$date.format('MMM yyyy', $theDate)</a> ($facet.value)</li>
+ <li><a href="$facetURL">$date.format('MMM yyyy', $theDate) $gap</a> ($facet.value)</li>
#end
#if ($facet.key == "before" && $facet.value > 0)
<li><a href="$facetURL">Before</a> ($facet.value)</li>
@@ -113,20 +113,20 @@
<span class="facet-field">$display</span>
<ul>
#if($before && $before != "")
- #set($value = "[* TO " + $start + "]")
+ #set($value = "[* TO " + $start + "}")
#set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
<li><a href="$facetURL">Less than $start</a> ($before)</li>
#end
#foreach ($facet in $field)
#set($rangeEnd = $math.add($facet.key, $gap))
- #set($value = "[" + $facet.key + " TO " + $rangeEnd + "]")
+ #set($value = "[" + $facet.key + " TO " + $rangeEnd + "}")
#set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
#if ($facetURL != '')
- <li><a href="$facetURL">$facet.key</a> ($facet.value)</li>
+ <li><a href="$facetURL">$facet.key - $rangeEnd</a> ($facet.value)</li>
#end
#end
- #if($end && $end != "")
- #set($value = "[" + $end + " TO *]")
+ #if($end && $end != "" && $after > 0)
+ #set($value = "[" + $end + " TO *}")
#set($facetURL = "#url_for_facet_range_filter($fieldName, $value)")
<li><a href="$facetURL">More than $math.toNumber($end)</a> ($after)</li>
#end
@@ -180,4 +180,8 @@
$v
#end
#end
-#end
\ No newline at end of file
+#end
+
+#macro(capitalize $name)
+ ${name.substring(0,1).toUpperCase()}${name.substring(1)}
+#end
\ No newline at end of file
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_dates.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_dates.vm?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_dates.vm (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_dates.vm Mon May 9 15:24:04 2011
@@ -1,5 +1,9 @@
##TODO: Generically deal with all dates
<h2 #annTitle("Facets generated by adding &facet.date= to the request")>Date Facets</h2>
-#set($field = $response.response.facet_counts.facet_dates.manufacturedate_dt)
-#set($gap = $response.response.facet_counts.facet_dates.manufacturedate_dt.gap)
-#display_facet_date($field, "Manufacture Date", "manufacturedate_dt", $gap)
+#foreach ($field in $response.response.facet_counts.facet_dates)
+ #set($name = $field.key)
+ #set($display = "#capitalize($name)")
+ #set($f = $field.value)
+ #set($gap = $field.value.gap)
+ #display_facet_date($f, $display, $name, $gap)
+#end
\ No newline at end of file
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_ranges.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_ranges.vm?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_ranges.vm (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/facet_ranges.vm Mon May 9 15:24:04 2011
@@ -1,10 +1,12 @@
<h2 #annTitle("Facets generated by adding &facet.range= to the request")>Range Facets</h2>
-#set($field = $response.response.facet_counts.facet_ranges.price.counts)
-#set($start = $response.response.facet_counts.facet_ranges.price.start)
-#set($end = $response.response.facet_counts.facet_ranges.price.end)
-#set($gap = $response.response.facet_counts.facet_ranges.price.gap)
-#set($before = $response.response.facet_counts.facet_ranges.price.before)
-#set($after = $response.response.facet_counts.facet_ranges.price.after)
-##TODO: Make this display the "range", not just the lower value
-##TODO: Have a generic way to deal with ranges
-#display_facet_range($field, "Price (in $)", "price", $start, $end, $gap, $before, $after)
+#foreach ($field in $response.response.facet_counts.facet_ranges)
+ #set($name = $field.key)
+ #set($display = "#capitalize($name)")
+ #set($f = $field.value.counts)
+ #set($start = $field.value.start)
+ #set($end = $field.value.end)
+ #set($gap = $field.value.gap)
+ #set($before = $field.value.before)
+ #set($after = $field.value.after)
+ #display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after)
+#end
\ No newline at end of file
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/main.css
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/main.css?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/main.css (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/main.css Mon May 9 15:24:04 2011
@@ -18,6 +18,18 @@
margin-left: 20px;
}
+.parsed_query_header {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 10pt;
+ font-weight: bold;
+}
+
+.parsed_query {
+ font-family: Courier, Courier New, monospaced;
+ font-size: 10pt;
+ font-weight: normal;
+}
+
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 10pt;
Modified: lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/query.vm
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/query.vm?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/query.vm (original)
+++ lucene/dev/branches/bulkpostings/solr/example/solr/conf/velocity/query.vm Mon May 9 15:24:04 2011
@@ -27,14 +27,16 @@
#end
#end
</div>
+ <div class="parsed_query_header">
#if($request.params.get('debugQuery'))
- <a href="#" onclick='jQuery(this).siblings("pre").toggle(); return false;'>toggle parsed query</a>
- <pre style="display:none">$response.response.debug.parsedquery</pre>
+ <a href="#" onclick='jQuery(this).siblings("div").toggle(); return false;'>toggle parsed query</a>
+ <div class="parsed_query" style="display:none">$response.response.debug.parsedquery</div>
#end
#set($queryOpts = $request.params.get("queryOpts"))
#if($queryOpts && $queryOpts != "")
<input type="hidden" name="queryOpts" value="$queryOpts"/>
#end
+ </div>
</form>
</div>
Modified: lucene/dev/branches/bulkpostings/solr/lib/apache-solr-noggit-pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/lib/apache-solr-noggit-pom.xml.template?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/lib/apache-solr-noggit-pom.xml.template (original)
+++ lucene/dev/branches/bulkpostings/solr/lib/apache-solr-noggit-pom.xml.template Mon May 9 15:24:04 2011
@@ -31,6 +31,6 @@
<artifactId>solr-noggit</artifactId>
<name>Solr Specific Noggit</name>
<version>@version@</version>
- <description>Solr Specific Noggit r944541</description>
+ <description>Solr Specific Noggit r1099557</description>
<packaging>jar</packaging>
</project>
Modified: lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/SolrDocumentList.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/SolrDocumentList.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/SolrDocumentList.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/SolrDocumentList.java Mon May 9 15:24:04 2011
@@ -61,7 +61,7 @@ public class SolrDocumentList extends Ar
public String toString() {
return "{numFound="+numFound
+",start="+start
- + (maxScore!=null ? ""+maxScore : "")
+ + (maxScore!=null ? ",maxScore="+maxScore : "")
+",docs="+super.toString()
+"}";
}
Modified: lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/params/UpdateParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/params/UpdateParams.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/params/UpdateParams.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/common/org/apache/solr/common/params/UpdateParams.java Mon May 9 15:24:04 2011
@@ -43,8 +43,11 @@ public interface UpdateParams
/** Rollback update commands */
public static String ROLLBACK = "rollback";
- /** Select the update processor to use. A RequestHandler may or may not respect this parameter */
- public static final String UPDATE_PROCESSOR = "update.processor";
+ /** Select the update processor chain to use. A RequestHandler may or may not respect this parameter */
+ public static final String UPDATE_CHAIN = "update.chain";
+ // TODO: Include the old deprecated param, for removal in Solr 4.0
+ public static final String UPDATE_CHAIN_DEPRECATED = "update.processor";
+
/**
* If optimizing, set the maximum number of segments left in the index after optimization. 1 is the default (and is equivalent to calling IndexWriter.optimize() in Lucene).
*/
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/PathHierarchyTokenizerFactory.java Mon May 9 15:24:04 2011
@@ -21,6 +21,7 @@ import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.path.PathHierarchyTokenizer;
+import org.apache.lucene.analysis.path.ReversePathHierarchyTokenizer;
/**
@@ -37,6 +38,8 @@ public class PathHierarchyTokenizerFacto
private char delimiter;
private char replacement;
+ private boolean reverse = false;
+ private int skip = PathHierarchyTokenizer.DEFAULT_SKIP;
/**
* Require a configured pattern
@@ -70,10 +73,23 @@ public class PathHierarchyTokenizerFacto
else{
replacement = delimiter;
}
+
+ v = args.get( "reverse" );
+ if( v != null ){
+ reverse = "true".equals( v );
+ }
+
+ v = args.get( "skip" );
+ if( v != null ){
+ skip = Integer.parseInt( v );
+ }
}
public Tokenizer create(Reader input) {
- return new PathHierarchyTokenizer(input, delimiter, replacement);
+ if( reverse ) {
+ return new ReversePathHierarchyTokenizer(input, delimiter, replacement, skip);
+ }
+ return new PathHierarchyTokenizer(input, delimiter, replacement, skip);
}
}
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/analysis/SynonymFilterFactory.java Mon May 9 15:24:04 2011
@@ -61,6 +61,16 @@ public class SynonymFilterFactory extend
tokFactory = loadTokenizerFactory( loader, tf, args );
}
+ Iterable<String> wlist=loadRules( synonyms, loader );
+
+ synMap = new SynonymMap(ignoreCase);
+ parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+ }
+
+ /**
+ * @return a list of all rules
+ */
+ protected Iterable<String> loadRules( String synonyms, ResourceLoader loader ) {
List<String> wlist=null;
try {
File synonymFile = new File(synonyms);
@@ -77,13 +87,12 @@ public class SynonymFilterFactory extend
} catch (IOException e) {
throw new RuntimeException(e);
}
- synMap = new SynonymMap(ignoreCase);
- parseRules(wlist, synMap, "=>", ",", expand,tokFactory);
+ return wlist;
}
private SynonymMap synMap;
- static void parseRules(List<String> rules, SynonymMap map, String mappingSep,
+ static void parseRules(Iterable<String> rules, SynonymMap map, String mappingSep,
String synSep, boolean expansion, TokenizerFactory tokFactory) {
int count=0;
for (String rule : rules) {
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/AbstractSolrEventListener.java Mon May 9 15:24:04 2011
@@ -23,7 +23,7 @@ import org.apache.solr.search.SolrIndexS
/**
*/
-class AbstractSolrEventListener implements SolrEventListener {
+public class AbstractSolrEventListener implements SolrEventListener {
protected final SolrCore core;
public AbstractSolrEventListener(SolrCore core) {
this.core = core;
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/CoreContainer.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/CoreContainer.java Mon May 9 15:24:04 2011
@@ -79,6 +79,7 @@ public class CoreContainer
protected Map<String ,IndexSchema> indexSchemaCache;
protected String adminHandler;
protected boolean shareSchema;
+ protected Integer zkClientTimeout;
protected String solrHome;
protected String defaultCoreName = "";
private ZkController zkController;
@@ -313,7 +314,7 @@ public class CoreContainer
zkHost = cfg.get("solr/@zkHost" , null);
adminPath = cfg.get("solr/cores/@adminPath", null);
shareSchema = cfg.getBool("solr/cores/@shareSchema", false);
- int zkClientTimeout = cfg.getInt("solr/cores/@zkClientTimeout", 10000);
+ zkClientTimeout = cfg.getInt("solr/cores/@zkClientTimeout", 10000);
hostPort = System.getProperty("hostPort");
if (hostPort == null) {
@@ -500,7 +501,12 @@ public class CoreContainer
SolrCore old = null;
synchronized (cores) {
old = cores.put(name, core);
+ /*
+ * set both the name of the descriptor and the name of the
+ * core, since the descriptors name is used for persisting.
+ */
core.setName(name);
+ core.getCoreDescriptor().name = name;
}
if (zkController != null) {
@@ -884,6 +890,7 @@ public class CoreContainer
if (this.libDir != null) {
writeAttribute(w,"sharedLib",libDir);
}
+ if(zkHost != null) writeAttribute(w, "zkHost", zkHost);
writeAttribute(w,"persistent",isPersistent());
w.write(">\n");
@@ -892,9 +899,13 @@ public class CoreContainer
}
w.write(" <cores");
writeAttribute(w, "adminPath",adminPath);
- if(adminHandler != null) writeAttribute(w, "adminHandler",adminHandler);
- if(shareSchema) writeAttribute(w, "shareSchema","true");
- if(!defaultCoreName.equals("")) writeAttribute(w, "defaultCoreName",defaultCoreName);
+ if(adminHandler != null) writeAttribute(w, "adminHandler", adminHandler);
+ if(shareSchema) writeAttribute(w, "shareSchema", "true");
+ if(!defaultCoreName.equals("")) writeAttribute(w, "defaultCoreName", defaultCoreName);
+ if(host != null) writeAttribute(w, "host", host);
+ if(hostPort != null) writeAttribute(w, "hostPort", hostPort);
+ if(zkClientTimeout != null) writeAttribute(w, "zkClientTimeout", zkClientTimeout);
+ if(hostContext != null) writeAttribute(w, "hostContext", hostContext);
w.write(">\n");
synchronized(cores) {
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/core/QuerySenderListener.java Mon May 9 15:24:04 2011
@@ -32,7 +32,7 @@ import java.util.List;
/**
* @version $Id$
*/
-class QuerySenderListener extends AbstractSolrEventListener {
+public class QuerySenderListener extends AbstractSolrEventListener {
public QuerySenderListener(SolrCore core) {
super(core);
}
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/AnalysisRequestHandlerBase.java Mon May 9 15:24:04 2011
@@ -337,6 +337,7 @@ public abstract class AnalysisRequestHan
@Override
public boolean incrementToken() throws IOException {
if (tokenIterator.hasNext()) {
+ clearAttributes();
AttributeSource next = tokenIterator.next();
Iterator<Class<? extends Attribute>> atts = next.getAttributeClassesIterator();
while (atts.hasNext()) // make sure all att impls in the token exist here
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ContentStreamHandlerBase.java Mon May 9 15:24:04 2011
@@ -24,6 +24,8 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -31,12 +33,22 @@ import org.apache.solr.update.processor.
*
**/
public abstract class ContentStreamHandlerBase extends RequestHandlerBase {
+ public static Logger log = LoggerFactory.getLogger(XmlUpdateRequestHandler.class);
@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
SolrParams params = req.getParams();
+ String updateChainName = null;
+ if(params.get(UpdateParams.UPDATE_CHAIN_DEPRECATED) != null) {
+ log.warn("Use of deprecated update request parameter "+UpdateParams.UPDATE_CHAIN_DEPRECATED+
+ " detected. Please use the new parameter "+UpdateParams.UPDATE_CHAIN+" instead, as support"+
+ " for "+UpdateParams.UPDATE_CHAIN_DEPRECATED+" will be removed in a later version.");
+ updateChainName = params.get(UpdateParams.UPDATE_CHAIN_DEPRECATED);
+ } else {
+ updateChainName = params.get(UpdateParams.UPDATE_CHAIN);
+ }
UpdateRequestProcessorChain processorChain =
- req.getCore().getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+ req.getCore().getUpdateProcessingChain(updateChainName);
UpdateRequestProcessor processor = processorChain.createProcessor(req, rsp);
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/ReplicationHandler.java Mon May 9 15:24:04 2011
@@ -843,9 +843,13 @@ public class ReplicationHandler extends
indexCommitPoint = reader.getIndexCommit();
}
} finally {
+ // We don't need to save commit points for replication, the SolrDeletionPolicy
+ // always saves the last commit point (and the last optimized commit point, if needed)
+ /***
if(indexCommitPoint != null){
core.getDeletionPolicy().saveCommitPoint(indexCommitPoint.getVersion());
}
+ ***/
}
}
if (core.getUpdateHandler() instanceof DirectUpdateHandler2) {
Modified: lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1101062&r1=1101061&r2=1101062&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/bulkpostings/solr/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Mon May 9 15:24:04 2011
@@ -190,7 +190,7 @@ public class CoreAdminHandler extends Re
}
UpdateRequestProcessorChain processorChain =
- core.getUpdateProcessingChain(params.get(UpdateParams.UPDATE_PROCESSOR));
+ core.getUpdateProcessingChain(params.get(UpdateParams.UPDATE_CHAIN));
wrappedReq = new LocalSolrQueryRequest(core, req.getParams());
UpdateRequestProcessor processor =
processorChain.createProcessor(wrappedReq, rsp);