@Override
 public IndexReader open(String... indexNames) {
   TreeSet<String> names = new TreeSet<String>();
   for (String name : indexNames) {
     if (name != null) {
       names.add(name);
     }
   }
   final int size = names.size();
   if (size == 0) {
     throw log.needAtLeastOneIndexName();
   }
   String[] indexManagerNames = names.toArray(new String[size]);
   IndexManagerHolder managerSource = searchFactory.getIndexManagerHolder();
   IndexManager[] managers = new IndexManager[size];
   for (int i = 0; i < size; i++) {
     String indexName = indexManagerNames[i];
     managers[i] = managerSource.getIndexManager(indexName);
     if (managers[i] == null) {
       throw log.requestedIndexNotDefined(indexName);
     }
   }
   return MultiReaderFactory.openReader(managers);
 }