code: def search(
      self,
      index=None,
      doc_type=None,
      query=None,
      params=None,
      headers=None,
  ):
      searchable_indexes = self._normalize_index_to_list(
          index, query=query
      )
  
      matches = self._find_match(index, doc_type, query=query)
  
      result = {
          "hits": {"total": len(matches), "max_score": 1.0},
          "_shards": {
              # Simulate indexes with 1 shard each
              "successful": len(searchable_indexes),
              "failed": 0,
              "total": len(searchable_indexes),
          },
          "took": 1,
          "timed_out": False,
      }
  
      hits = []
      for match in matches:
          match["_score"] = 1.0
          hits.append(match)
      result["hits"]["hits"] = hits
  
      return result
  
imports: from __future__ import annotations
  import fnmatch
  import json
  from elasticsearch import Elasticsearch
  from elasticsearch.exceptions import NotFoundError
  from .utilities import MissingIndexException, get_random_id, query_params
label_desc: Use image node_id 11 for calling the FakeElasticsearch obj's underlying member method code with example usage: obj.search(index, doc_type, query, params, headers) and returns: result