transcripter.services.search_service API documentation

# Module `transcripter.services.search_service`

## Classes

`class SearchService (config: Config)`

  Service for searching indexed YouTube videos and their transcripts in Redis.

  ## Attributes

  `config` :`Config`
    Configuration object containing settings.
  `redis_manager` :`RedisManager`
    Manager for interacting with Redis.

  Initializes the SearchService with the given configuration.

  ## Args

  `config` :`Config`
    Configuration object containing settings.
  Expand source code

      class SearchService:
          """
          Service for searching indexed YouTube videos and their transcripts in Redis.

          Attributes:
              config (Config): Configuration object containing settings.
              redis_manager (RedisManager): Manager for interacting with Redis.
          """

          def __init__(self, config: Config) -> None:
              """
              Initializes the SearchService with the given configuration.

              Args:
                  config (Config): Configuration object containing settings.
              """
              self.config: Config = config
              self.redis_manager: RedisManager = RedisManager(self.config)
              logger.info("SearchService initialized")
              self._ensure_connection()

          def _ensure_connection(self) -> None:
              """
              Ensures a connection to the Redis server.
              """
              self.redis_manager.ensure_connection()

          def search(self, query_str: str) -> List[Dict[str, Union[str, float]]]:
              """
              Searches for documents in Redis based on the query string.

              Args:
                  query_str (str): The query string to search for.

              Returns:
                  List[Dict[str, Union[str, float]]]: A list of dictionaries containing search results with video details.
              """
              if not query_str:
                  logger.debug("Empty search query")
                  return []

              logger.info(f"Searching for: {query_str}")
              results = self.redis_manager.search(query_str)
              logger.debug(f"Raw search results: {results}")

              filtered_results: List[Dict[str, Union[str, float]]] = [
                  {
                      "video_id": doc.get("video_id", ""),
                      "video_title": doc.get("video_title", ""),
                      "snippet": doc.get("text", ""),
                      "start_time": float(doc.get("start_time", 0)),
                      "timecode": doc.get("timecode", "00:00:00"),
                  }
                  for doc in results.get("docs", [])
              ]

              logger.info(f"Found {len(filtered_results)} results for query: {query_str}")
              logger.debug(f"Filtered results: {filtered_results}")
              return filtered_results

          def get_all_indexed_video_ids(self) -> List[str]:
              """
              Retrieves all indexed video IDs from Redis.

              Returns:
                  List[str]: A list of all indexed video IDs.
              """
              return self.redis_manager.get_all_indexed_video_ids()

  ### Methods

  `def get_all_indexed_video_ids(self) ‑> List[str]`

    Retrieves all indexed video IDs from Redis.

    ## Returns

    `List[str]`
      A list of all indexed video IDs.
  `def search(self, query_str: str) ‑> List[Dict[str, Union[str, float]]]`

    Searches for documents in Redis based on the query string.

    ## Args

    `query_str` :`str`
      The query string to search for.

    ## Returns

    `List[Dict[str, Union[str, float]]]`
      A list of dictionaries containing search results with video details.