cognee.search() to ask questions against your processed datasets. This guide shows the basic call and what each parameter does so you know which knob to turn.
Before you start:
- Complete Quickstart to understand basic operations
- Ensure you have LLM Providers configured for LLM-backed search types
- Run
cognee.cognify(...)to build the graph before searching - Keep at least one dataset with
readpermission for the user running the search
Code in Action
SearchType.GRAPH_COMPLETION is the default, so you get an LLM-backed answer plus supporting context as soon as you have data in your graph.What Just Happened
The search call uses the defaultSearchType.GRAPH_COMPLETION mode to provide LLM-backed answers with supporting context from your knowledge graph. The results are returned as a list that you can iterate through and process as needed.
Parameters Reference
Most examples below assume you are inside an async function. Import helpers when you need them:Core Parameters
Core Parameters
query_text(str, required): The question or phrase you want answered.query_type(SearchType, optional, default:SearchType.GRAPH_COMPLETION): Switch search modes without changing your code flow. See Search Types for the complete list and Retrievers for how each type maps to a retriever.top_k(int, optional, default: 10): Cap how many ranked results you want back.
Prompt & Generation Parameters
Prompt & Generation Parameters
system_prompt_path(str, optional, default:"answer_simple_question.txt"): Point to a prompt file packaged with your project.system_prompt(Optional[str]): Inline override for experiments or dynamically generated prompts.only_context(bool, optional, default: False): Skip LLM generation and just fetch supporting context chunks.
Advanced Parameters
Advanced Parameters
wide_search_top_k(int, optional, default: 100): Used by graph-completion retrievers to cap initial candidate retrieval before ranking. Increase for broader recall when the graph is large.triplet_distance_penalty(float, optional, default: 3.5): Penalty applied in graph retrieval ranking; affects how triplet distance influences the final ranking.retriever_specific_config(dict, optional): Per-retriever options. Examples:response_modelfor typed LLM output;max_iterfor GRAPH_COMPLETION_COT;context_extension_roundsfor GRAPH_COMPLETION_CONTEXT_EXTENSION. See the API reference for full keys.verbose(bool, optional, default: False): When true, the result includes detailed fields (text_result,context_result,objects_result) where applicable (e.g. when access control is on).
Node Sets & Filtering Parameters
Node Sets & Filtering Parameters
These options filter the graph down to the node sets you care about. In most workflows you set both: keep
node_type=NodeSet and pass one or more set names in node_name—the same labels you used when calling cognee.add(..., node_set=[...]).node_type(Optional[Type], optional, default:NodeSet): Controls which graph model to search. Leave this asNodeSetunless you’ve built a custom node model.node_name(Optional[List[str]]): Names of the node sets to include. Cognee treats each string as a logical bucket of memories.
Interaction & History Parameters
Interaction & History Parameters
session_id(Optional[str]): Maintain conversation history across searches. Sessions are used only by GRAPH_COMPLETION, RAG_COMPLETION, and TRIPLET_COMPLETION; other modes (CHUNKS, SUMMARIES, etc.) do not use or write session history. Batch mode does not use session cache. When you omitsession_idand caching is enabled, Cognee usesdefault_sessionand still stores the turn. When you use the samesession_id, Cognee includes previous interactions in the LLM prompt, enabling contextual follow-up questions.See Sessions Guide for complete examples. To record feedback on answers, use Sessions and the Feedback System (cognee.session.add_feedback/delete_feedback).
Datasets & Users
Datasets & Users
-
datasets(Optional[Union[list[str], str]]): Limit search to dataset names you already know. -
dataset_ids(Optional[Union[list[UUID], UUID]]): Same asdatasets, but with explicit UUIDs when names collide. -
user(Optional[User]): Provide a user object when running multi-tenant flows or background jobs.WhenENABLE_BACKEND_ACCESS_CONTROL=true:-
Result shape: Searches run only on datasets the user can access. Results are returned as a list of per-dataset objects (
dataset_name,dataset_id,search_result). Useverbose=Trueto includetext_result,context_result, andobjects_resultin each item. -
If no
useris given,get_default_user()is used (created if missing); errors only if this user lacks dataset permissions. -
If
datasetsis not set, all datasets readable by the user are searched; errors if none are accessible or if requested datasets are forbidden.
ENABLE_BACKEND_ACCESS_CONTROL=false- Dataset filters (
datasets,dataset_ids) are ignored — everything is searched. - Results come back as a plain list of answers (e.g.
["answer1", "answer2"]). If only one dataset is searched and the retriever returns a list, Cognee may unwrap one level for backwards compatibility.
-
Result shape: Searches run only on datasets the user can access. Results are returned as a list of per-dataset objects (
Additional examples
Full python script that expands the previous example can be found underneath.Expanded example
Expanded example