Github user moshebla commented on a diff in the pull request:
https://github.com/apache/lucene-solr/pull/385#discussion_r191999062
--- Diff: solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
---
@@ -175,69 +172,83 @@ public String getHashableId() {
return id;
}
- public boolean isBlock() {
- return solrDoc.hasChildDocuments();
+ /**
+ * @return String id to hash
+ */
+ public String getHashableId() {
+ return getHashableId(solrDoc);
}
- @Override
- public Iterator<Document> iterator() {
- return new Iterator<Document>() {
- Iterator<SolrInputDocument> iter;
-
- {
- List<SolrInputDocument> all = flatten(solrDoc);
-
- String idField = getHashableId();
-
- boolean isVersion = version != 0;
-
- for (SolrInputDocument sdoc : all) {
- sdoc.setField(IndexSchema.ROOT_FIELD_NAME, idField);
- if(isVersion) sdoc.setField(CommonParams.VERSION_FIELD, version);
- // TODO: if possible concurrent modification exception (if
SolrInputDocument not cloned and is being forwarded to replicas)
- // then we could add this field to the generated lucene document
instead.
- }
-
- iter = all.iterator();
- }
+ public List<SolrInputDocument> computeFlattenedDocs() {
+ List<SolrInputDocument> all = flatten(solrDoc);
- @Override
- public boolean hasNext() {
- return iter.hasNext();
- }
+ String rootId = getHashableId();
- @Override
- public Document next() {
- return DocumentBuilder.toDocument(iter.next(), req.getSchema());
- }
+ boolean isVersion = version != 0;
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
+ for (SolrInputDocument sdoc : all) {
+ if (all.size() > 1) {
--- End diff --
Previously flatten was not called if there were no child documents, since
isBlock() would return false in
[DirectUpdateHandler2](https://github.com/apache/lucene-solr/pull/385/files#diff-ebdc4ecf6a2398f102ba7fae37648d10L976).
If we remove this condition even documents without any children will have
__root__ added to them, which is not the case beforehand.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]