Github user dsmiley commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/395#discussion_r194768590
  
    --- Diff: solr/core/src/java/org/apache/solr/handler/loader/JsonLoader.java 
---
    @@ -556,82 +572,71 @@ private void parseFieldValue(SolrInputField sif) 
throws IOException {
           if (ev == JSONParser.OBJECT_START) {
             parseExtendedFieldValue(sif, ev);
           } else {
    -        Object val = parseNormalFieldValue(ev, sif.getName());
    +        Object val = parseNormalFieldValue(ev, sif);
             sif.setValue(val);
           }
         }
     
         private void parseExtendedFieldValue(SolrInputField sif, int ev) 
throws IOException {
           assert ev == JSONParser.OBJECT_START;
     
    -      Object normalFieldValue = null;
    -      Map<String, Object> extendedInfo = null;
    +      SolrInputDocument extendedSolrDocument = 
generateExtendedValueDoc(ev);
     
    -      for (; ; ) {
    -        ev = parser.nextEvent();
    -        switch (ev) {
    -          case JSONParser.STRING:
    -            String label = parser.getString();
    -            if ("boost".equals(label)) {
    -              ev = parser.nextEvent();
    -              if (ev != JSONParser.NUMBER &&
    -                  ev != JSONParser.LONG &&
    -                  ev != JSONParser.BIGNUMBER) {
    -                throw new 
SolrException(SolrException.ErrorCode.BAD_REQUEST, "Boost should have number. "
    -                    + "Unexpected " + JSONParser.getEventString(ev) + " at 
[" + parser.getPosition() + "], field=" + sif.getName());
    -              }
    +      if (isChildDoc(extendedSolrDocument)) {
    +        SolrInputDocument cDoc = new SolrInputDocument();
    +        for (Map.Entry<String, SolrInputField> extendedEntry: 
extendedSolrDocument.entrySet()) {
    +          cDoc.setField(extendedEntry.getKey(), 
extendedEntry.getValue().getValue());
    +        }
    +        sif.addValue(cDoc);
    +        return;
    +      }
     
    -              String message = "Ignoring field boost: " + 
parser.getDouble() + " as index-time boosts are not supported anymore";
    -              if (WARNED_ABOUT_INDEX_TIME_BOOSTS.compareAndSet(false, 
true)) {
    -                log.warn(message);
    -              } else {
    -                log.debug(message);
    -              }
    -            } else if ("value".equals(label)) {
    -              normalFieldValue = parseNormalFieldValue(parser.nextEvent(), 
sif.getName());
    -            } else {
    -              // If we encounter other unknown map keys, then use a map
    -              if (extendedInfo == null) {
    -                extendedInfo = new HashMap<>(2);
    -              }
    -              // for now, the only extended info will be field values
    -              // we could either store this as an Object or a 
SolrInputField
    -              Object val = parseNormalFieldValue(parser.nextEvent(), 
sif.getName());
    -              extendedInfo.put(label, val);
    -            }
    -            break;
    +      Object normalFieldValue = null;
    +      Map<String, Object> extendedInfo = null;
     
    -          case JSONParser.OBJECT_END:
    -            if (extendedInfo != null) {
    -              if (normalFieldValue != null) {
    -                extendedInfo.put("value", normalFieldValue);
    -              }
    -              sif.setValue(extendedInfo);
    -            } else {
    -              sif.setValue(normalFieldValue);
    -            }
    -            return;
    +      for (String label: extendedSolrDocument.keySet() ) {
    --- End diff --
    
    Whenever I see looping over keys from a map-like thing, I often see a line 
of code that then fetches the value, as seen here.  This internally results in 
a bunch of lookups that aren't necessary.  Instead,  note that 
SolrInputDocument is Iterable<SolrInputField> (which itself has the key and 
value), so just loop over that.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to