You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by gs...@apache.org on 2009/08/18 20:29:10 UTC
svn commit: r805528 - in /lucene/solr/trunk: CHANGES.txt
src/java/org/apache/solr/util/SolrDocumentModifier.java
src/java/org/apache/solr/util/SolrPluginUtils.java
src/test/org/apache/solr/util/SolrPluginUtilsTest.java
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(""));