class_docstr: Encapsulates logic about the communication, queries and index mapping
  transformations between DAOs layer and the elasticsearch backend.
code: def search_records(
      self,
      id: str,
      query: BackendRecordsQuery = BaseRecordsQuery(),
      sort: SortConfig = SortConfig(),
      record_from: int = 0,
      size: int = 100,
      exclude_fields: List[str] = None,
      enable_highlight: bool = True,
  ) -> Tuple[int, List[Dict[str, Any]]]:
      index = dataset_records_index(id)
  
      if not sort.sort_by and sort.shuffle is False:
          sort.sort_by = [SortableField(id="id")]  # Default sort by id
  
      results = self.client.search_docs(
          index=index,
          query=query,
          sort=sort,
          doc_from=record_from,
          size=size,
          exclude_fields=exclude_fields,
          enable_highlight=enable_highlight,
      )
  
      total = results["total"]
      records = results["docs"]
  
      return total, records
  
imports: from typing import Any, Dict, Iterable, List, Optional, Tuple
  from argilla.logging import LoggingMixin
  from argilla.server.commons.models import TaskType
  from argilla.server.constants import PROTECTED_METADATA_FIELD_PREFIX
  from argilla.server.daos.backend.base import IndexNotFoundError, InvalidSearchError
  from argilla.server.daos.backend.client_adapters.base import IClientAdapter
  from argilla.server.daos.backend.client_adapters.factory import ClientAdapterFactory
  from argilla.server.daos.backend.mappings.datasets import DATASETS_INDEX_NAME, datasets_index_mappings
  from argilla.server.daos.backend.mappings.helpers import mappings, tasks_common_mappings, tasks_common_settings
  from argilla.server.daos.backend.mappings.text2text import text2text_mappings
  from argilla.server.daos.backend.mappings.text_classification import text_classification_mappings
  from argilla.server.daos.backend.mappings.token_classification import token_classification_mappings
  from argilla.server.daos.backend.metrics import ALL_METRICS
  from argilla.server.daos.backend.metrics.base import ElasticsearchMetric
  from argilla.server.daos.backend.search.model import BackendRecordsQuery, BaseDatasetsQuery, BaseQuery, BaseRecordsQuery, SortableField, SortConfig
  from argilla.server.errors import BadRequestError, EntityNotFoundError
  from argilla.server.errors.task_errors import MetadataLimitExceededError
  from argilla.server.pydantic_v1 import BaseModel, Field
  from argilla.server.settings import settings
label_desc: Use image node_id 8 for calling the GenericElasticEngineBackend obj's underlying member method code with example usage: obj.search_records(id, query, sort, record_from, size, exclude_fields, enable_highlight) and returns: total,  records