/**
   * 将一个文件列表生成索引
   *
   * @param list
   */
  private void createFileIndex(List<FileIndexDocument> list) {
    int length = list.size();

    indexCount += length;

    boolean debugLogFlag = false;
    if (log.isDebugEnabled()) {
      debugLogFlag = true;
    }

    List<String> deleteFileDocumentIdList = new ArrayList<String>();

    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < length; i++) {
      FileIndexDocument fileIndexDocument = list.get(i);

      fileIndexDocument.setIndexInfoType(fileIndexAllItem.getIndexInfoType());
      fileIndexDocument.setIndexPathType(fileIndexAllItem.getIndexPathType());

      // 拦截生成文件附加索引内容
      IIndexAllFileInterceptor indexAllFileInterceptor =
          fileIndexAllItem.getIndexAllFileInterceptor();

      if (indexAllFileInterceptor != null) {
        Map<String, Object> addonFileDocuments =
            indexAllFileInterceptor.interceptor(fileIndexDocument);
        Map<String, Object> addonFileDocumentsType = indexAllFileInterceptor.getFieldsType();
        if (addonFileDocuments != null && addonFileDocuments.size() > 0) {
          Object[][] objects = UtilTool.getMapKeyValue(addonFileDocuments);
          int objectlength = objects.length;
          for (int j = 0; j < objectlength; j++) {
            String fieldName = String.valueOf(objects[j][0]);
            String fieldValue = String.valueOf(objects[j][1]);
            String type = "";

            if (addonFileDocumentsType != null) {
              type = String.valueOf(addonFileDocumentsType.get(fieldName));
            }

            RDocItem docItem = new RDocItem();
            docItem.setName(fieldName);
            docItem.setContent(fieldValue);

            if (!type.equals("")) {
              if (type.equalsIgnoreCase(String.valueOf(RetrievalType.RDocItemType.KEYWORD))) {
                fileIndexDocument.addKeyWord(docItem);
              } else if (type.equalsIgnoreCase(String.valueOf(RetrievalType.RDocItemType.DATE))) {
                fileIndexDocument.addDateProperty(docItem);
              } else if (type.equalsIgnoreCase(String.valueOf(RetrievalType.RDocItemType.NUMBER))) {
                fileIndexDocument.addNumberProperty(docItem);
              } else if (type.equalsIgnoreCase(
                  String.valueOf(RetrievalType.RDocItemType.PROPERTY))) {
                fileIndexDocument.addContent(docItem);
              } else {
                fileIndexDocument.addContent(docItem);
              }
            } else {
              fileIndexDocument.addContent(docItem);
            }
          }
        }
      }

      // 判断当前操作时属于更新索引,还是重建索引
      if (fileIndexAllItem.getIndexOperatorType() == RetrievalType.RIndexOperatorType.UPDATE) {

        if (debugLogFlag) {
          stringBuilder.append(
              "批量文件索引["
                  + fileIndexDocument.getIndexPathType()
                  + "]更新:"
                  + fileIndexDocument.getFile().getAbsolutePath()
                  + "\n");
        }

        String existsFileDocumentId =
            StringClass.getString(
                queryFacade.queryFileDocumentIndexIdByFileId(
                    fileIndexAllItem.getIndexPathType(), fileIndexDocument.getFileId()));
        if (existsFileDocumentId.equals("")) {
          list.add(fileIndexDocument);
        } else {
          fileIndexDocument.setId(existsFileDocumentId);
          list.add(fileIndexDocument);

          deleteFileDocumentIdList.add(existsFileDocumentId);
        }
      } else {
        if (debugLogFlag) {
          stringBuilder.append(
              "批量文件索引["
                  + fileIndexDocument.getIndexPathType()
                  + "]新增:"
                  + fileIndexDocument.getFile().getAbsolutePath()
                  + "\n");
        }
      }
    }

    log.debug(stringBuilder);

    if (deleteFileDocumentIdList != null && deleteFileDocumentIdList.size() > 0) {
      docOperatorFacade.delete(fileIndexAllItem.getIndexPathType(), deleteFileDocumentIdList);
    }

    Iterator<FileIndexDocument> it = list.iterator();
    List<FileIndexDocument> theList = new ArrayList<FileIndexDocument>();
    while (it.hasNext()) {
      theList.add(it.next());
      it.remove();
      if (theList.size() >= fileIndexAllItem.getPageSize()) {
        docOperatorFacade.createFileIndexs(theList, fileIndexAllItem.getMaxIndexFileSize());
        theList.clear();
      }
    }
    if (theList.size() > 0) {
      docOperatorFacade.createFileIndexs(theList, fileIndexAllItem.getMaxIndexFileSize());
      theList.clear();
    }
    theList = null;
    list.clear();
  }