You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2019/05/26 15:23:59 UTC
[lucene-solr] branch master updated: SOLR-12652: Clean up
RealTimeGetComponent.toSolrDoc
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 <Er...@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;
}
/**