Index: metacat-index/src/test/java/edu/ucsb/nceas/metacat/index/SolrIndexTest.java
===================================================================
--- metacat-index/src/test/java/edu/ucsb/nceas/metacat/index/SolrIndexTest.java	(nonexistent)
+++ metacat-index/src/test/java/edu/ucsb/nceas/metacat/index/SolrIndexTest.java	(revision 7547)
@@ -0,0 +1,41 @@
+package edu.ucsb.nceas.metacat.index;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+
+
+import org.junit.Test;
+
+public class SolrIndexTest {
+    
+    private static final String SYSTEMMETAFILEPATH = "src/test/resources/eml-system-meta-example.xml";
+    private static final String EMLFILEPATH = "src/test/resources/eml-example.xml";
+    
+    /**
+     * Test building index for an insert.
+     */
+    @Test
+    public void testInsert() throws Exception {
+       SolrIndex solrIndex = generateSolrIndex();
+       InputStream systemInputStream = new FileInputStream(new File(SYSTEMMETAFILEPATH));
+       InputStream emlInputStream = new FileInputStream(new File(EMLFILEPATH));
+       String id = "urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098";
+       solrIndex.insert(id, systemInputStream, emlInputStream);
+       
+    }
+    
+    private SolrIndex generateSolrIndex() throws Exception {
+        ApplicationController controller = new ApplicationController();
+        List<SolrIndex> list = controller.getSolrIndexes();
+        SolrIndex[] solrIndexesarray = list.toArray(new SolrIndex[list.size()]);
+        SolrIndex index = solrIndexesarray[0];
+        return index;
+    }
+}
+
Index: metacat-index/src/test/resources/eml-example.xml
===================================================================
--- metacat-index/src/test/resources/eml-example.xml	(nonexistent)
+++ metacat-index/src/test/resources/eml-example.xml	(revision 7547)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<eml:eml packageId="urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098" system="knb" xmlns:eml="eml://ecoinformatics.org/eml-2.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="eml://ecoinformatics.org/eml-2.1.1 eml.xsd">  <dataset> <title>test</title>
+ <creator id="1365702846270"> <individualName><surName>test</surName>
+</individualName>
+</creator>
+ <keywordSet><keyword>test</keyword>
+</keywordSet>
+<contact id="1365702851795"><individualName><surName>adf</surName>
+</individualName>
+</contact>
+</dataset>
+ </eml:eml>
Index: metacat-index/src/test/resources/eml-system-meta-example.xml
===================================================================
--- metacat-index/src/test/resources/eml-system-meta-example.xml	(nonexistent)
+++ metacat-index/src/test/resources/eml-system-meta-example.xml	(revision 7547)
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><d1:systemMetadata xmlns:d1="http://ns.dataone.org/service/types/v1"><identifier>urn:uuid:606a19dd-b531-4bf4-b5a5-6d06c3d39098</identifier><formatId>eml://ecoinformatics.org/eml-2.1.1</formatId><size>585</size><checksum algorithm="MD5">e4860c218a14597ac3cacf75b621328b</checksum><rightsHolder>public</rightsHolder><accessPolicy><allow><subject>public</subject><permission>read</permission></allow></accessPolicy><replicationPolicy replicationAllowed="true" numberReplicas="2"/><archived>false</archived><dateSysMetadataModified>2013-04-11T17:54:25.462+00:00</dateSysMetadataModified><authoritativeMemberNode>TBD</authoritativeMemberNode></d1:systemMetadata>
\ No newline at end of file
Index: metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SolrIndex.java
===================================================================
--- metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SolrIndex.java	(revision 7546)
+++ metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SolrIndex.java	(revision 7547)
@@ -48,6 +48,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.client.solrj.response.UpdateResponse;
 import org.apache.solr.common.SolrInputDocument;
 import org.dataone.cn.indexer.XMLNamespaceConfig;
 import org.dataone.cn.indexer.XPathDocumentParser;
@@ -67,7 +69,7 @@
 public class SolrIndex {
     
     //private static final String INPUT_ENCODING = "UTF-8";
-    
+    public static final String METACATPIDFIELD = "id";
     private List<IDocumentSubprocessor> subprocessors = null;
     private SolrServer solrServer = null;
     private XMLNamespaceConfig xmlNamespaceConfig = null;
@@ -95,10 +97,11 @@
     /**
      * Constructor
      */
-    public SolrIndex(XMLNamespaceConfig xmlNamespaceConfig, List<SolrField> sysmetaSolrFields)
+    public SolrIndex(List<SolrField> sysmetaSolrFields, XMLNamespaceConfig xmlNamespaceConfig)
                     throws XPathExpressionException, ParserConfigurationException {
                 this.xmlNamespaceConfig = xmlNamespaceConfig;
                 this.sysmetaSolrFields = sysmetaSolrFields;
+                solrServer = new HttpSolrServer("http://localhost:8080/solr/");
                 init();
     }
     
@@ -261,6 +264,7 @@
                     if(doc != null) {
                         List<SolrElementField> list = doc.getFieldList();
                         if(list != null) {
+                            //solrDoc.addField(METACATPIDFIELD, pid);
                             Iterator<SolrElementField> iterator = list.iterator();
                             while (iterator.hasNext()) {
                                 SolrElementField field = iterator.next();
@@ -267,6 +271,7 @@
                                 if(field != null) {
                                     String value = field.getValue();
                                     String name = field.getName();
+                                    //System.out.println("add name/value pair - "+name+"/"+value);
                                     solrDoc.addField(name, value);
                                 }
                             }
@@ -274,9 +279,22 @@
                     }
                 }
                 if(!solrDoc.isEmpty()) {
-                    solrServer.add(solrDoc);
+                    UpdateResponse response = solrServer.add(solrDoc);
+                    solrServer.commit();
+                    //System.out.println("=================the response is:\n"+response.toString());
                 }
             }
         }
     }
+ 
+    /**
+     * Remove the indexed associated with specified pid.
+     * @param pid  the pid which the indexes are associated with
+     * @throws IOException
+     * @throws SolrServerException
+     */
+    public void remove(String pid) throws IOException, SolrServerException {
+        solrServer.deleteByQuery(METACATPIDFIELD + ":" + pid);
+       
+    }
 }
Index: metacat-index/src/main/resources/schema.xml
===================================================================
--- metacat-index/src/main/resources/schema.xml	(nonexistent)
+++ metacat-index/src/main/resources/schema.xml	(revision 7547)
@@ -0,0 +1,380 @@
+<?xml version="1.0" ?>
+<!-- 
+THE OFFICIAL DataONE Index Solr Schema definition file.  
+This schema is copied into the dataone-cn-index buildout for deployment on cn nodes.
+
+The Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default) 
+ or located where the classloader for the Solr webapp can find it.
+
+ For more information, on how to customize this file, please see...
+ http://wiki.apache.org/solr/SchemaXml
+-->
+
+<schema name="dataone" version="1.1">
+    <types>
+        <!-- field type definitions. The "name" attribute is
+   just a label to be used by field definitions.  The "class"
+   attribute and any other attributes determine the real
+   behavior of the fieldtype.  -->
+
+        <!-- The StringField type is not analyzed, but indexed/stored verbatim  -->
+        <fieldtype name="string" class="solr.StrField" sortMissingLast="true"/>
+
+        <!-- boolean type: "true" or "false" -->
+        <fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+
+        <!-- The optional sortMissingLast and sortMissingFirst attributes are
+             currently supported on types that are sorted internally as a strings.
+           - 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 (asc or desc).
+           - 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.
+        -->
+
+        <!-- numeric field types that store and index the text
+value verbatim (and hence don't support range queries since the
+lexicographic ordering isn't equal to the numeric ordering) -->
+        <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 with a lexicographic ordering the same as the numeric ordering
+  so that range queries correctly work. -->
+        <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"/>
+
+        <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
+   is a more restricted form of the canonical representation of dateTime
+   http://www.w3.org/TR/xmlschema-2/#dateTime
+   The trailing "Z" designates UTC time and is mandatory.
+   Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+   All other components are mandatory. -->
+        <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. Different
+            analyzers may be specified for indexing and querying.
+
+            The optional positionIncrementGap puts space between multiple fields of
+            this type on the same document, with the purpose of preventing false phrase
+            matching across fields.
+
+            For more info on customizing your analyzer chain, please see...
+         http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
+
+        -->
+
+        <!-- Standard analyzer commonly used by Lucene developers
+        -->
+        <!-- Standard analyzer commonly used by Lucene developers -->
+<!--
+         <fieldtype name="text_lu" class="solr.TextField" positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.StandardTokenizerFactory"/>
+                <filter class="solr.StandardFilterFactory"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.StopFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory"/>
+            </analyzer>
+        </fieldtype> 
+-->
+        <!-- One could also specify an existing Analyzer implementation in Java
+             via the class attribute on the analyzer element:
+        <fieldtype name="text_lu" class="solr.TextField">
+          <analyzer class="org.apache.lucene.analysis.snowball.SnowballAnalyzer"/>
+        </fieldType>
+        -->
+
+        <!-- A text field that only splits on whitespace for more exact matching -->
+        <fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+            </analyzer>
+        </fieldtype>
+
+        <fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
+            <analyzer type="index">
+          		<tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <filter class="solr.WordDelimiterFilterFactory" 
+                	generateWordParts="1"
+                	catenateWords="1"
+                	generateNumberParts="1"
+                	splitOnNumerics="0"/>
+                
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.StopFilterFactory" />
+                <filter class="solr.PorterStemFilterFactory" />
+                <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                
+                <filter class="solr.WordDelimiterFilterFactory" 
+                	generateWordParts="1"
+                	catenateWords="0"
+                	generateNumberParts="1"
+                	splitOnNumerics="0"/>
+                
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.StopFilterFactory"/>
+                <filter class="solr.PorterStemFilterFactory" />
+            </analyzer>
+        </fieldtype>
+
+        <fieldtype name="text_no_token" class="solr.TextField" positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>    
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.StopFilterFactory" />
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>                
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.StopFilterFactory"/>
+            </analyzer>
+        </fieldtype>
+
+<!--
+         <fieldtype name="text_all" class="solr.TextField" positionIncrementGap="100">
+            <analyzer type="index">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                in this example, we will only use synonyms at query time
+                <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
+               
+                <filter class="solr.StopFilterFactory" ignoreCase="true"/>
+                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+            </analyzer>
+            <analyzer type="query">
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
+                <filter class="solr.StopFilterFactory" ignoreCase="true"/>
+                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
+                        catenateWords="0" catenateNumbers="0" catenateAll="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+            </analyzer>
+        </fieldtype>
+ -->
+
+        <!-- Less flexible matching, but less false matches.  Probably not ideal for product names
+but may be good for SKUs.  Can insert dashes in the wrong place and still match. -->
+         <!--<fieldtype name="textTight" class="solr.TextField" positionIncrementGap="100">
+            <analyzer>
+                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
+                <filter class="solr.StopFilterFactory" ignoreCase="true"/>
+                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0"
+                        catenateWords="1" catenateNumbers="1" catenateAll="0"/>
+                <filter class="solr.LowerCaseFilterFactory"/>
+                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+            </analyzer>
+        </fieldtype>--> 
+		
+    </types>
+
+
+<!-- ======================================================================= -->
+    <fields>
+        <!-- Valid attributes for fields:
+            name: mandatory - the name for the field
+            type: mandatory - the name of a previously defined type from the <types> section
+            indexed: true if this field should be indexed (searchable)
+            stored: true if this field should be retrievable
+            multiValued: true if this field may contain multiple values per document
+            omitNorms: (expert) set to true to omit the norms associated with this field
+                       (this disables length normalization and index-time boosting for the field)
+        -->
+       <field name="_version_" type="long" indexed="true" stored="true"/>
+        <field name="id"              	type="string"   indexed="true" stored="true" multiValued="false"/>
+        <field name="formatId"    		type="string"   indexed="true" stored="true" multiValued="false"/>
+		<field name="formatType"		type="string"	indexed="true"	stored="true"	multiValued="false"/>
+        <field name="size"            	type="slong"     indexed="true" stored="true" multiValued="false"/>
+        <field name="checksum"        	type="string"   indexed="false" stored="true" multiValued="false"/>
+        <field name="checksumAlgorithm" type="string" indexed="false" stored="true"/>
+        <field name="dateUploaded"    type="date"     indexed="true" stored="true" multiValued="false"/>
+        <field name="dateModified"    type="date"     indexed="true" stored="true" multiValued="false"/>
+        <field name="submitter"       type="string"   indexed="true" stored="true" multiValued="false"/>
+        <field name="rightsHolder"    type="string"   indexed="true" stored="true" multiValued="false"/>
+        <field name="authoritativeMN"       	type="string"   indexed="false" stored="true" multiValued="false"/>
+        <field name="replicationAllowed"     	type="boolean"  indexed="false" stored="true" multiValued="false"/>
+        <field name="numberReplicas"      		type="integer"  indexed="false" stored="true" multiValued="false"/>
+        <field name="preferredReplicationMN"   	type="string"   indexed="false" stored="true" multiValued="true"/>
+        <field name="blockedReplicationMN"  	type="string"   indexed="false" stored="true" multiValued="true"/>
+        <field name="replicaMN"      		type="string"   indexed="false" stored="true" multiValued="true"/>
+        <field name="replicaVerifiedDate" 	type="date"    indexed="false" stored="true" multiValued="true"/>
+        <field name="datasource"       		type="string"  indexed="true" stored="true" multiValued="false"/>
+        <field name="obsoletes"       		type="string"   indexed="true" stored="true" multiValued="false"/>
+        <field name="obsoletedBy"      		type="string"   indexed="true" stored="true" multiValued="false"/>
+
+        <!-- Object relationships -->
+        <field name="resourceMap"		type="string"   indexed="true" stored="true" multiValued="true"/>
+        <field name="documents"			type="string"   indexed="true" stored="true" multiValued="true"/>
+        <field name="isDocumentedBy"	type="string"   indexed="true" stored="true" multiValued="true"/>
+
+        <!--Permissions-->
+        <field name="readPermission"    type="string"   indexed="true" stored="true" multiValued="true"/>
+        <field name="writePermission"   type="string"   indexed="true" stored="true" multiValued="true"/>
+        <field name="changePermission"  type="string"   indexed="true" stored="true" multiValued="true"/>
+        <field name="isPublic"          type="boolean"  indexed="true" stored="true" />
+        
+        <!-- Science metadata properties -->
+        <field name="abstract"                 type="text"      multiValued="false" indexed="true" stored="true" />
+        <field name="author"                   type="string"    multiValued="false" indexed="true" stored="true" />
+        <field name="authorLastName"             type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="keywords"                 type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="keyConcept"               type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="southBoundCoord"          type="sfloat"     multiValued="false" indexed="true" stored="true"/>
+        <field name="northBoundCoord"          type="sfloat"     multiValued="false" indexed="true" stored="true"/>
+        <field name="westBoundCoord"           type="sfloat"     multiValued="false" indexed="true" stored="true"/>
+        <field name="eastBoundCoord"           type="sfloat"     multiValued="false" indexed="true" stored="true"/>
+        <field name="namedLocation"            type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="beginDate"                type="date"      multiValued="false" indexed="true" stored="true" />
+        <field name="endDate"                  type="date"      multiValued="false" indexed="true" stored="true" />
+        
+        <field name="title"                    type="text"    multiValued="false" indexed="true" stored="true" />
+        <field name="scientificName"           type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="relatedOrganizations"     type="string"    multiValued="true" indexed="true" stored="true" />
+        <field name="datePublished"            type="date"      multiValued="false" indexed="true" stored="true" />
+        <field name="pubDate" 				   type="date" 							indexed="true" stored="true"/>
+
+		<field name="investigator" 		type="string" 	indexed="true" stored="true" multiValued="true"/>
+		<field name="investigatorText" 	type="text" 	indexed="true" stored="false" multiValued="true"/>
+        <field name="ogcUrl" 			type="text" 	indexed="false" stored="true"/>
+        <field name="sku" 				type="text" indexed="true" stored="true"/>
+        <field name="identifier" 		type="text" indexed="true" stored="true"/>
+        <field name="LTERSite"	 		type="string" 	indexed="true" stored="true"/>
+        <field name="origin" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="originText" 		type="text" 	indexed="true" stored="false" multiValued="true"/>
+        <field name="titlestr" 			type="string" 	indexed="true" stored="false"/>
+        <field name="geoform" 			type="string" 	indexed="true" stored="true"/>
+        <field name="presentationCat" 	type="string" 	indexed="true" stored="true"/>
+        <field name="purpose" 			type="text" 	indexed="true" stored="true"/>
+        <field name="updateDate" 		type="date" 	indexed="true" stored="true"/>
+        <field name="edition" 			type="text" 	indexed="true" stored="true"/>
+        <field name="dataUrl" 			type="string" 	indexed="false" stored="true"/>
+        <field name="originator" 		type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="originatorText" 	type="text"	  	indexed="true" stored="false" multiValued="true"/>
+        <field name="family" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="species" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="genus" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="kingdom" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="phylum" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="order" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="class" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+
+        <field name="webUrl" 			type="string" 	indexed="false" stored="true" multiValued="true"/>
+
+        <field name="contactOrganization" 		type="string" indexed="true" stored="true" multiValued="true"/>
+        <field name="contactOrganizationText" 	type="text"   indexed="true" stored="false" multiValued="true"/>
+
+        <field name="keywordsText" 		type="text" 	indexed="true" stored="false" multiValued="true"/>
+        <field name="placeKey" 			type="text" 	indexed="true" stored="true" multiValued="true"/>
+
+        <field name="noBoundingBox" 	type="string" 	indexed="true" stored="true"/>
+        <field name="isSpatial" 		type="string" 	indexed="true" stored="true"/>
+
+        <field name="decade" 			type="string" 	indexed="true" stored="true"/>
+        <field name="gcmdKeyword" 		type="text" 	indexed="true" stored="true" multiValued="true"/>
+
+        <!-- these are ornl daac fields, may not be populated for nbii, but are required to be here for indexing purpose-->
+        <field name="project" 			type="string" 	indexed="true" stored="true"/>
+        <field name="projectText" 		type="text" 	indexed="true" stored="false"/>
+
+        <field name="site" 				type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="siteText" 			type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="parameter" 		type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="parameterText"		type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="sensor" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="sensorText" 		type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="source" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="sourceText" 		type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="term" 				type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="termText" 			type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="topic" 			type="string" 	indexed="true" stored="true" multiValued="true"/>
+        <field name="topicText" 		type="text" 	indexed="true" stored="false" multiValued="true"/>
+
+        <field name="fileID" 			type="string" 	indexed="true" stored="true"/>
+   		<field name="text"				type="text"		indexed="true" stored="true" multiValued="false" />
+<!-- ======================================================================= -->
+        <!-- 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"/>
+    </fields>
+
+<!-- ======================================================================= -->
+    <!-- field to use to determine and enforce document uniqueness. -->
+    <uniqueKey>id</uniqueKey>
+
+    <!-- field for the QueryParser to use when an explicit fieldname is absent -->
+    <defaultSearchField>text</defaultSearchField>
+
+    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
+    <solrQueryParser defaultOperator="AND"/>
+
+<!-- ======================================================================= -->
+    <!-- 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="id" dest="sku"/>
+    <copyField source="id" dest="identifier"/>
+    <copyfield source="replicaMN" dest="datasource" />
+
+    <copyField source="title" dest="titlestr"/>
+
+    <copyField source="origin" dest="originText"/>
+    <copyField source="origin" dest="originatorText"/>
+    
+    <copyField source="project" dest="projectText"/>
+    
+    <copyField source="site" dest="siteText"/>
+    <copyField source="parameter" dest="parameterText"/>
+    <copyField source="sensor" dest="sensorText"/>
+    <copyField source="source" dest="sourceText"/>
+    <copyField source="term" dest="termText"/>
+    <copyField source="topic" dest="topicText"/>
+    <copyField source="investigator" dest="investigatorText"/>
+    <copyField source="keywords" dest="keywordsText"/>
+    <copyField source="pubDate" dest="datePublished" />
+    <copyField source="dateUploaded" dest="updateDate" />
+    <copyField source="contactOrganization" dest="contactOrganizationText"/>
+  
+
+    <!-- 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>
Index: metacat-index/pom.xml
===================================================================
--- metacat-index/pom.xml	(revision 7546)
+++ metacat-index/pom.xml	(revision 7547)
@@ -35,10 +35,16 @@
             <version>1.2.0-SNAPSHOT</version>
             <type>jar</type>
     </dependency>
+     <dependency>
+        <groupId>org.dataone</groupId>
+        <artifactId>d1_common_java</artifactId>
+        <version>1.2.0-SNAPSHOT</version>
+        <type>jar</type>
+    </dependency>
     <dependency>
         <groupId>org.apache.solr</groupId>
         <artifactId>solr-solrj</artifactId>
-        <version>3.4.0</version>
+        <version>4.1.0</version>
     </dependency>
   </dependencies>
 </project>
