code: def _evadb_vector_index_scan(self, *args, **kwargs):
      # Fetch the index from disk.
      index_catalog_entry = (
          self.catalog().get_index_catalog_entry_by_name(
              self.index_name
          )
      )
      self.index_path = index_catalog_entry.save_file_path
      self.index = VectorStoreFactory.init_vector_store(
          self.vector_store_type,
          self.index_name,
          **handle_vector_store_params(
              self.vector_store_type, self.index_path, self.db.catalog
          ),
      )
  
      search_feat = self._get_search_query_results()
      index_result = self.index.query(
          VectorIndexQuery(search_feat, self.limit_count.value)
      )
      # todo support queries over distance as well
      # distance_list = index_result.similarities
      row_num_np = index_result.ids
      # Load projected columns from disk and join with search results.
      row_num_col_name = None
  
      # handle the case where the index_results are less than self.limit_count.value
      num_required_results = self.limit_count.value
      if len(index_result.ids) < self.limit_count.value:
          num_required_results = len(index_result.ids)
          logger.warning(
              f"The index {self.index_name} returned only {num_required_results} results, which is fewer than the required {self.limit_count.value}."
          )
  
      final_df = pd.DataFrame()
      res_data_list = []
      row_num_df = pd.DataFrame({"row_num_np": row_num_np})
      for batch in self.children[0].exec(**kwargs):
          if not row_num_col_name:
              column_list = batch.columns
              row_num_alias = get_row_num_column_alias(column_list)
              row_num_col_name = "{}.{}".format(
                  row_num_alias, ROW_NUM_COLUMN
              )
  
          if (
              not batch.frames[row_num_col_name]
              .isin(row_num_df["row_num_np"])
              .any()
          ):
              continue
  
          for index, row in batch.frames.iterrows():
              row_dict = row.to_dict()
              res_data_list.append(row_dict)
  
      result_df = pd.DataFrame(res_data_list)
  
      final_df = pd.merge(
          row_num_df,
          result_df,
          left_on="row_num_np",
          right_on=row_num_col_name,
          how="inner",
      )
  
      if "row_num_np" in final_df:
          del final_df["row_num_np"]
      yield Batch(final_df)
  
imports: from typing import Iterator
  import pandas
  from evadb.catalog.models.utils import VectorStoreType
  from evadb.catalog.sql_config import ROW_NUM_COLUMN
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.executor.executor_utils import ExecutorError, handle_vector_store_params
  from evadb.models.storage.batch import Batch
  from evadb.plan_nodes.storage_plan import StoragePlan
  from evadb.plan_nodes.vector_index_scan_plan import VectorIndexScanPlan
  from evadb.third_party.databases.interface import get_database_handler
  from evadb.third_party.vector_stores.types import VectorIndexQuery
  from evadb.third_party.vector_stores.utils import VectorStoreFactory
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 5 for calling the VectorIndexScanExecutor obj's underlying member method code with example usage: obj._evadb_vector_index_scan() without return types