lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From er...@apache.org
Subject [lucene-solr] branch master updated: SOLR-12652: Clean up RealTimeGetComponent.toSolrDoc
Date Sun, 26 May 2019 15:23:59 GMT
This is an automated email from the ASF dual-hosted git repository.

erick pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 97e7d8a  SOLR-12652: Clean up RealTimeGetComponent.toSolrDoc
97e7d8a is described below

commit 97e7d8a3d78779bb26148ed1849ba1acdf44c6c5
Author: Erick Erickson <Erick.Erickson@gmail.com>
AuthorDate: Sun May 26 08:23:53 2019 -0700

    SOLR-12652: Clean up RealTimeGetComponent.toSolrDoc
---
 solr/CHANGES.txt                                   |  2 +
 .../handler/component/RealTimeGetComponent.java    | 70 +++++++---------------
 2 files changed, 23 insertions(+), 49 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 8d665fe..d67718a 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -112,6 +112,8 @@ Other Changes
 * SOLR-13467: Include the S2 Geometry lib to make it simpler to use prefixTree="s2" on a
Geo3D spatial field.
   Improved documentation on Geo3D too.  (David Smiley)
 
+* SOLR-12562: Clean up RealTimeGetComponent.toSolrDoc (Erick Erickson)
+
 ==================  8.1.1 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index 9908913..5c73095 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -763,60 +763,32 @@ public class RealTimeGetComponent extends SearchComponent
     SolrDocument out = new SolrDocument();
     for( IndexableField f : doc.getFields() ) {
       // Make sure multivalued fields are represented as lists
-      Object existing = out.get(f.name());
-      if (existing == null) {
-        SchemaField sf = schema.getFieldOrNull(f.name());
-
-        // don't return copyField targets
-        if (sf != null && schema.isCopyFieldTarget(sf)) continue;
-
-        if (sf != null && sf.multiValued()) {
-          List<Object> vals = new ArrayList<>();
-          if (f.fieldType().docValuesType() == DocValuesType.SORTED_NUMERIC) {
-            // SORTED_NUMERICS store sortable bits version of the value, need to retrieve
the original
-            vals.add(sf.getType().toObject(f)); // (will materialize by side-effect)
-          } else {
-            vals.add( materialize(f) );
-          }
-          out.setField( f.name(), vals );
-        }
-        else{
-          out.setField( f.name(), materialize(f) );
-        }
-      }
-      else {
-        out.addField( f.name(), materialize(f) );
+
+      SchemaField sf = schema.getFieldOrNull(f.name());
+      if (sf == null) {
+        // This is unexpected!
+        log.warn("schema.getFieldOrNull returned null {}, this is unexpected! ", f.name());
+        out.setField(f.name(), f.stringValue());
+        continue;
       }
-    }
-    return out;
-  }
 
-  /**
-   * Ensure we don't have {@link org.apache.lucene.document.LazyDocument.LazyField} or equivalent.
-   * It can pose problems if the searcher is about to be closed and we haven't fetched a
value yet.
-   */
-  private static IndexableField materialize(IndexableField in) {
-    if (in instanceof Field) { // already materialized
-      return in;
-    }
-    return new ClonedField(in);
-  }
+      // don't return copyField targets
+      if (schema.isCopyFieldTarget(sf)) continue;
+      
+      if (out.get(f.name()) != null) {
+        out.addField(f.name(), sf.getType().toObject(f));
+        continue;
+      }
 
-  private static class ClonedField extends Field { // TODO Lucene Field has no copy constructor;
maybe it should?
-    ClonedField(IndexableField in) {
-      super(in.name(), in.fieldType());
-      this.fieldsData = in.numericValue();
-      if (this.fieldsData == null) {
-        this.fieldsData = in.binaryValue();
-        if (this.fieldsData == null) {
-          this.fieldsData = in.stringValue();
-          if (this.fieldsData == null) {
-            // fallback:
-            assert false : in; // unexpected
-          }
-        }
+      if (sf.multiValued()) {
+        List<Object> vals = new ArrayList<>();
+        vals.add(sf.getType().toObject(f));
+        out.setField(f.name(), vals);
+      } else {
+        out.setField(f.name(), sf.getType().toObject(f));
       }
     }
+    return out;
   }
 
   /**


Mime
View raw message