Author: gsingers
Date: Tue Aug 18 18:29:10 2009
New Revision: 805528
URL: http://svn.apache.org/viewvc?rev=805528&view=rev
Log:
SOLR-1367: simple callback for modifying the Document when using the
SolrPluginUtils
Added:
lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java
(with props)
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/util/SolrPluginUtils.java
lucene/solr/trunk/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
Modified: lucene/solr/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=805528&r1=805527&r2=805528&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Tue Aug 18 18:29:10 2009
@@ -267,6 +267,8 @@
HTMLStripStandardTokenizerFactory deprecated. To strip HTML tags,
HTMLStripCharFilter can be used
with an arbitrary Tokenizer. (koji)
+68. SOLR-1367: Added callback mechanism for converting DocList to
SolrDocumentList in SolrPluginUtils (gsingers)
+
Optimizations
----------------------
Added: lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java?rev=805528&view=auto
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java
(added)
+++ lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java
Tue Aug 18 18:29:10 2009
@@ -0,0 +1,37 @@
+package org.apache.solr.util;
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.solr.common.SolrDocument;
+
+
+/**
+ * Callback capability for modifying a SolrDocument in the {...@link
SolrPluginUtils#docListToSolrDocumentList(org.apache.solr.search.DocList,
org.apache.solr.search.SolrIndexSearcher, java.util.Set, java.util.Map)}
+ *
+ * <p/>
+ * NOTE: This API is subject to change.
+ * Due to https://issues.apache.org/jira/browse/SOLR-1298 and
https://issues.apache.org/jira/browse/SOLR-705, this interface may change in
the future.
+ *
+ **/
+public interface SolrDocumentModifier {
+ /**
+ * Implement this method to allow for changes to be made to the {...@link
org.apache.solr.common.SolrDocument} in the {...@link
SolrPluginUtils#docListToSolrDocumentList(org.apache.solr.search.DocList,
org.apache.solr.search.SolrIndexSearcher, java.util.Set, SolrDocumentModifier,
java.util.Map)}
+ * call.
+ * @param doc The {...@link org.apache.solr.common.SolrDocument} that can be
modified.
+ */
+ void process(SolrDocument doc);
+}
Propchange:
lucene/solr/trunk/src/java/org/apache/solr/util/SolrDocumentModifier.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: lucene/solr/trunk/src/java/org/apache/solr/util/SolrPluginUtils.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=805528&r1=805527&r2=805528&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/util/SolrPluginUtils.java
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/util/SolrPluginUtils.java Tue
Aug 18 18:29:10 2009
@@ -887,26 +887,36 @@
}
}
+
+ public static SolrDocumentList docListToSolrDocumentList(
+ DocList docs,
+ SolrIndexSearcher searcher,
+ Set<String> fields,
+ Map<SolrDocument, Integer> ids ) throws IOException
+ {
+ return docListToSolrDocumentList(docs, searcher, fields, null, ids);
+ }
+
/**
* Convert a DocList to a SolrDocumentList
- *
- * The optional param "ids" is populated with the lucene document id
- * for each SolrDocument.
- *
+ *
+ * The optional param "ids" is populated with the lucene document id
+ * for each SolrDocument.
+ *
* @param docs The {...@link org.apache.solr.search.DocList} to convert
* @param searcher The {...@link org.apache.solr.search.SolrIndexSearcher}
to use to load the docs from the Lucene index
* @param fields The names of the Fields to load
+ * @param docModifier The {...@link SolrDocumentModifier}
* @param ids A map to store the ids of the docs
* @return The new {...@link org.apache.solr.common.SolrDocumentList}
containing all the loaded docs
* @throws java.io.IOException if there was a problem loading the docs
* @since solr 1.4
*/
public static SolrDocumentList docListToSolrDocumentList(
- DocList docs,
- SolrIndexSearcher searcher,
- Set<String> fields,
- Map<SolrDocument, Integer> ids ) throws IOException
- {
+ DocList docs,
+ SolrIndexSearcher searcher,
+ Set<String> fields, SolrDocumentModifier docModifier,
+ Map<SolrDocument, Integer> ids ) throws IOException{
DocumentBuilder db = new DocumentBuilder(searcher.getSchema());
SolrDocumentList list = new SolrDocumentList();
list.setNumFound(docs.matches());
@@ -917,7 +927,7 @@
while (dit.hasNext()) {
int docid = dit.nextDoc();
-
+
Document luceneDoc = searcher.doc(docid, fields);
SolrDocument doc = new SolrDocument();
db.loadStoredFields(doc, luceneDoc);
@@ -927,10 +937,14 @@
if (docs.hasScores()) {
doc.addField("score", dit.score());
} else {
- doc.addField("score", 0.0f);
+ doc.addField("score", 0.0f);
+ }
+
+ if (docModifier != null) {
+ docModifier.process(doc);
}
list.add( doc );
-
+
if( ids != null ) {
ids.put( doc, new Integer(docid) );
}
@@ -938,6 +952,7 @@
return list;
}
+
/**
* Given a SolrQueryResponse replace the DocList if it is in the result.
* Otherwise add it to the response
Modified:
lucene/solr/trunk/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/util/SolrPluginUtilsTest.java?rev=805528&r1=805527&r2=805528&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
Tue Aug 18 18:29:10 2009
@@ -19,6 +19,14 @@
import org.apache.solr.util.SolrPluginUtils;
import org.apache.solr.util.SolrPluginUtils.DisjunctionMaxQueryParser;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.search.DocList;
+import org.apache.solr.search.DocSlice;
+import org.apache.solr.request.SolrQueryResponse;
+import org.apache.solr.common.util.*;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
@@ -27,12 +35,15 @@
import org.apache.lucene.search.DisjunctionMaxQuery;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.BooleanClause.Occur;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Set;
+import java.util.HashSet;
/**
* Tests that the functions in SolrPluginUtils work as advertised.
@@ -42,6 +53,36 @@
public String getSchemaFile() { return "schema.xml"; }
public String getSolrConfigFile() { return "solrconfig.xml"; }
+
+ public void testDocModifier() throws Exception {
+ assertU("", adoc("id", "3234", "val_t", "quick red fox"));
+ assertU("", adoc("id", "3235", "val_t", "quick green fox"));
+ assertU("", adoc("id", "3236", "val_t", "quick brown fox"));
+ commit();
+ SolrIndexSearcher srchr = h.getCore().getSearcher().get();
+ SolrIndexSearcher.QueryResult qr = new SolrIndexSearcher.QueryResult();
+ SolrIndexSearcher.QueryCommand cmd = new SolrIndexSearcher.QueryCommand();
+ cmd.setQuery(new MatchAllDocsQuery());
+ qr = srchr.search(qr, cmd);
+
+ DocList docs = qr.getDocList();
+ Set<String> fields = new HashSet<String>();
+ fields.add("val_t");
+
+ SolrDocumentModifier docMod = new SolrDocumentModifier() {
+ public void process(SolrDocument doc) {
+ doc.addField("junk", "foo");
+ }
+ };
+
+ SolrDocumentList list = SolrPluginUtils.docListToSolrDocumentList(docs,
srchr, fields, docMod, null);
+ assertTrue("list Size: " + list.size() + " is not: " + docs.size(),
list.size() == docs.size());
+ for (SolrDocument document : list) {
+ assertNotNull(document.get("junk"));
+ }
+
+ }
+
public void testPartialEscape() {
assertEquals("",pe(""));