def METHOD_NAME(
    self, query: str, top_k: int = 5, metadata: dict = None, **kwargs: Any
) -> List[Document]:
    metadata_fields = self._get_metadata_fields()
    query_vector = self.embedding_model.get_embedding(query)
    if metadata is not None:
        for key, value in metadata.items():
            filters = {
                "path": [key],
                "operator": "Equal",
                "valueString": value
            }
    results = self.client.query.get(
        self.class_name,
        metadata_fields + [self.text_field],
    ).with_near_vector(
        {"vector": query_vector, "certainty": 0.7}
    ).with_where(filters).with_limit(top_k).do()
    results_data = results["data"]["Get"][self.class_name]
    search_res = self._get_search_res(results_data, query)
    documents = self._build_documents(results_data, metadata_fields)
    return {"search_res": search_res, "documents": documents}