/**
  * @return the query used to fetch the documents from the Solr index
  * @throws SolrIndexerException if we fail to obtain a query for the configured root entity
  */
 private SolrQuery getQuery() throws SolrIndexerException {
   if (query == null) {
     query = new SolrQuery(solrReferenceResolver.getQuery(rootReference));
     query.setFields(
         FieldUtils.WIKI,
         FieldUtils.SPACES,
         FieldUtils.NAME,
         FieldUtils.DOCUMENT_LOCALE,
         FieldUtils.VERSION);
     query.addFilterQuery(FieldUtils.TYPE + ':' + EntityType.DOCUMENT.name());
     // We sort by ID, which is normally the serialized document reference, in order to ensure this
     // iterator has
     // the same order as the database iterator.
     query.addSort(FieldUtils.ID, ORDER.asc);
     // Paginate using a cursor because it performs better than basic pagination (using absolute
     // offset,
     // especially when the offset is big) and because the impact of index modifications is much
     // smaller (and we
     // plan to update the index to match the database during the synchronization process).
     // See https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results
     query.set(CursorMarkParams.CURSOR_MARK_PARAM, CursorMarkParams.CURSOR_MARK_START);
     query.setRows(LIMIT);
   }
   return query;
 }
 /**
  * @return the query used to fetch the documents from the Solr index
  * @throws SolrIndexerException if we fail to obtain a query for the configured root entity
  */
 private SolrQuery getQuery() throws SolrIndexerException {
   if (query == null) {
     query = new SolrQuery(solrReferenceResolver.getQuery(rootReference));
     query.setFields(
         FieldUtils.WIKI,
         FieldUtils.SPACE,
         FieldUtils.NAME,
         FieldUtils.DOCUMENT_LOCALE,
         FieldUtils.VERSION);
     query.addFilterQuery(FieldUtils.TYPE + ':' + EntityType.DOCUMENT.name());
     // We must add the unique key field (ID in our case) to the list of sort fields (as a tie
     // breaker) in order
     // to use the cursor-based pagination.
     query
         .addSort(FieldUtils.WIKI, ORDER.asc)
         .addSort(FieldUtils.SPACE_EXACT, ORDER.asc)
         .addSort(FieldUtils.NAME_EXACT, ORDER.asc)
         .addSort(FieldUtils.DOCUMENT_LOCALE, ORDER.asc)
         .addSort(FieldUtils.ID, ORDER.asc);
     // Speed up the query by disabling the faceting and the highlighting.
     query.set(FacetParams.FACET, false);
     query.set(HighlightParams.HIGHLIGHT, false);
     // Paginate using a cursor because it performs better than basic pagination (using absolute
     // offset,
     // especially when the offset is big) and because the impact of index modifications is much
     // smaller (and we
     // plan to update the index to match the database during the synchronization process).
     // See https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results
     query.set(CursorMarkParams.CURSOR_MARK_PARAM, CursorMarkParams.CURSOR_MARK_START);
     query.setRows(LIMIT);
   }
   return query;
 }
  @Override
  public boolean setFieldsInternal(
      LengthSolrInputDocument solrDocument, EntityReference entityReference) throws Exception {
    BaseObjectReference objectReference = new BaseObjectReference(entityReference);

    DocumentReference classReference = objectReference.getXClassReference();
    DocumentReference documentReference = new DocumentReference(objectReference.getParent());

    XWikiDocument document = getDocument(documentReference);
    BaseObject object = document.getXObject(objectReference);
    if (object == null) {
      return false;
    }

    solrDocument.setField(FieldUtils.ID, resolver.getId(object.getReference()));
    setDocumentFields(documentReference, solrDocument);
    solrDocument.setField(FieldUtils.TYPE, objectReference.getType().name());
    solrDocument.setField(FieldUtils.CLASS, localSerializer.serialize(classReference));
    solrDocument.setField(FieldUtils.NUMBER, objectReference.getObjectNumber());

    setLocaleAndContentFields(documentReference, solrDocument, object);

    return true;
  }