Search nodes

Search nodes give you the power to find anything, anywhere in Tana. They are easy to make, and can exist anywhere you can add a node. The many search operators available put advanced tools in your hands to create very specific searches according to your needs.
Last updated: October 2024

Overview

Search nodes retrieve nodes from any workspace you have access to. Results show up as references to nodes. Editing these nodes will edit the original and every reference of it.

What a search node retrieves is based on the search query. The query specifies what you are looking for, and is made in the Query builder.

Search nodes have a magnifying glass as a bullet icon. So they're recognizable even when collapsed.

Basics

  • Search nodes run queries on your Tana data. Examples of queries include:
    • Look for recipes with specific ingredients: Find all nodes tagged #recipes with the field Ingredient==Tomatoes, Peppers
    • Look for filled-out Feedback fields under a draft: Find all nodes with field Feedback==Set that is descendant of the node Q4 workplan draft
    • Look for unfinished tasks with a date older than a specific date: Find nodes tagged #todo that is NOT DONE, and with a date that is older (less) than January 10
  • Queries are composed in the Query builder. The builder uses search operators that come in the form of Tana objects. All operators are listed here: Search operators. For an explainer on how to read queries, check out this article.
  • Search nodes only run when expanded. This means they are not running live in the background while collapsed.
  • You can add nodes via the list of results. These nodes end up on the daily page of the workspace the search node lives in. It will try to create a node that follows the conditions of the query. If it isn't able to, it will show as a "mismatch".
  • You can add a view to a search node. You can apply views to all nodes that have children, including search nodes.
  • Returned results are limited to a maximum of 2500 nodes. If you run searches that return more than 2500 nodes, it will not run and you'll be prompted to change your query to narrow your search even further.

Details

Creating a search node

Create a search node with a basic query

Find nodes in the command line guides you through a simple set of search terms:

  • Press Cmd/Ctrl+K > Find Nodes, then hit Enter and continue following the menu to specify what you're looking for.
  • Once you're done, choose the "show as list" option which will create the search node with the query pre-populated and as a list.

You can always modify the query after it's been created through the command line by opening the Query builder.

If you want to create an empty search node to have access to all options immediately, see the next section:

Create a search node with empty query

  • On any node, type ? , then click on the ✨Create search node button.
  • The Query builder will open immediately upon creation.

About queries

  • A search node filters results based on its query.
  • A query consists of one or more conditions that must be met in order for results to show up.
  • The queries can be seen by opening the Query builder.

Deleting a search node

  • Like with regular nodes, to delete a search node use right-click on the node and select "Delete node/reference", or use Cmd/Ctrl+Shift+Backspace
  • Treat a search node like you would deleting nodes and references.

Query builder

  1. The query builder (formerly "search expression") popup
  2. Area for composing the query
  3. Easy access to search operators, field values, system fields and more
  4. Linter that shows current query written out as plain code
  5. "Run once" refreshes results while the builder is still open, and "Done" closes builder and refresh results)

AND wrapper

The entire query is wrapped in an AND operator, so by default every search criteria on the the query will return results that match every condition. For example, the screenshot below is looking for all nodes tagged #todo, AND it has to be NOT DONE, AND with a date that is older (less) than January 10 . Nodes have to meet all criteria listed.

Search operators

Below is the full list of all operators that work in the query builder.

Nodes and text

Tana objects that can be used in the query builder:

OPERATORDESCRIPTIONLINTER
A referenceInserting a reference will return only descendants of the reference. Tip: Reference a Workspace to limit results to nodes that live in that Workspace only.DescendantOf:nodeName
A supertagInserting a supertag reference will return only instances of that supertag. Type # and a list of supertags will pop up.Tag:tagName
A field definitionInserting a field definition will return only nodes that have this field, and a value set for it.hasField:fieldName
A field with one or more valuesInserting one or more plain text or reference values in a field will return nodes with this field that contain any of these values.fieldName==Hello world
A plain text nodeInserting a plain text node that is not a reference will return nodes that match the text.StringMatch:"hello world"
A node with a dateInserting a date will return nodes whose name contains a dateDateWithin:date
A regular expression between /.../Inserting a regular expression between the two forward slashes will return nodes that match the regular expression.RegexpMatch:/yourRegEx/

Field operators

Add values to these fields to configure them.

OPERATORDESCRIPTIONLINTER
>ANDAll of the clauses in the field values should match. AND is implied at the top level of the query builder as well.AND
>ORAny of the clauses in the field values should match.OR
>NOTNegates a single clause (if you want to negate multiple, you need multiple NOT statements).NOT
>LTLT = Less than. The LT field value should be the field you want to query with a field value (a number/date). This finds nodes that have a value less than the value provided. Also works with dates.fieldName < fieldValue
>GTGT = Greater than. The GT field value should be the field you want to query with a field value (a number/date). This finds nodes that have a value greater than than the value provided. Also works with dates.fieldName > fieldValue
>LINKS TOThe LINKS TO operator finds all nodes that link to the reference in the field value. Only takes references or PARENT/GRANDPARENT. Similar to what is shown in a node's reference section.LinksTo:nodeName
>CHILD OFIf the field value is a reference, the CHILD OF operator finds nodes/references that are children of the reference. If the field value is a field definition, the operator finds nodes/references that are children of this field.ChildOf:nodeName
>OWNED BYThe OWNED BY operator finds nodes that are children of and owned by the reference in the field value.OwnedBy:nodeName
>DATE OVERLAPSMatches a date range that overlaps with the date provided

Keyword operators

Type these keywords into a first-level empty node in the query builder.

Node type

OPERATORDESCRIPTIONLINTER
IS TAGA keyword that finds any supertag definition.is:Tag
IS FIELDA keyword that finds any field definition.is:Field
IS CALENDAR NODEA keyword that finds year/week/day nodes under the calendar. Useful for excluding these from searches.is:CalendarNode
IS SEARCH NODEA keyword that finds any search node.is:SearchNode
IS COMMANDA keyword that finds any command node.is:Command
IS PUBLISHEDA keyword that finds any published node.is:PublishedNode

Node contents

OPERATORDESCRIPTIONLINTER
HAS FIELDA keyword that finds any node with a field.has:Field
HAS TAGA keyword that finds any node that has a supertag applied.has:Tag
HAS MEDIAA keyword that finds any node with a media attachment (audio, video, or image).has:Media
HAS AUDIOA keyword that finds any node with an audio attachment.has:Audio
HAS VIDEOA keyword that finds any node with a video attachment.has:Video
HAS IMAGEA keyword that finds any node with a image attachment.has:Image
FOR DATE [yyyy-mm-dd]A keyword that finds all nodes with an inline reference to the date specified.FOR DATE 2023-10-18

Scope

OPERATORDESCRIPTIONLINTER
PARENTS DESCENDANTSA keyword that finds nodes that are descendants of the parent of the search node, excluding references.DescendantOf:parentnodeName
GRANDPARENTS DESCENDANTSA keyword that finds nodes that are descendants of the grandparent of the search node, excluding references.DescendantOf:grandparentnodeName
PARENTS DESCENDANTS WITH REFSA keyword that finds nodes that are descendants of the parent of the search node, including references.InTreeUnder:parentnodeName
GRANDPARENTS DESCENDANTS WITH REFSA keyword that finds nodes that are descendants of the grandparent of the search node, including references.InTreeUnder:grandparentnodeName
IN LIBRARYA keyword that finds direct children of a Library node. The Library is a default node in each workspace.in:Library
ON DAY NODEA keyword that finds direct children of calendar day nodes.on:DayNode
SIBLING NAMED "[name]"A keyword that limits the search to descendants of the named sibling. Example: SIBLING NAMED "Meeting notes".DescendantOf:siblingnodeName

Checkbox

OPERATORDESCRIPTIONLINTER
TODOA keyword that finds all nodes with a checkbox, regardless if it is checked or not.is:Todo
DONEA keyword that finds any checked todos.is:Done
DONE LAST [num] DAYSA keyword that finds any todos that were manually checked within a certain number of days. Replace [num] with a number. Example: DONE LAST 7 DAYS.DONE LAST 3 DAYS
NOT DONEA keyword that finds any "not done" nodes, and unchecked todos. Combine with TODO to only find unchecked todos.NOT is:Done
OVERDUEAn old keyword that finds any unchecked todos 1. using the system-defined Due Date field, and 2. with a date value that is older than today's date. For a more robust overdue search query, see Examples section below.is:Overdue

Created/edited

OPERATORDESCRIPTIONLINTER
CREATED LAST [num] DAYSA keyword that finds any nodes created within a certain number of days. Replace [num] with a number. Example: CREATED LAST 7 DAYS.CREATED LAST 3 DAYS
EDITED BY [user email] LAST [num] DAYSA keyword that finds any nodes modified by a Tana user within a certain number of days. Replace [user email] with the email of the workspace member, and [num] with a number. Example: MODIFIED BY olaf@tana.inc LAST 7 DAYS.EDITED BY USER@TANA.COM LAST 3 DAYS
EDITED BY [user email] ANYTIMEA keyword that finds all nodes modified by a Tana user. Example: MODIFIED BY olaf@tana.inc ANYTIME. EDITED BY USER@TANA.COM ANYTIME
EDITED LAST [num] DAYSA keyword that finds all nodes edited within a certain number of days relative to today. Example: EDITED LAST 7 DAYS.EDITED LAST 3 DAYS

Field values

Use these as field values:

OPERATORDESCRIPTIONLINTER
PARENTUse in any field. Inserts the parent node relative to the search node. Useful for finding nodes with fields that use the parent/grandparent node as a field value, such as every #author node finding all #books they're the >Author of.fieldName==parentnodeName
GRANDPARENTUse in any field. Inserts the grandparent node relative to the search node. Useful for finding nodes with fields that use the parent/grandparent node as a field value, such as every #author node finding all #books they're the >Author of.fieldName==grandparentnodeName
FOR RELATIVE DATE [term]Use in date fields only. Inserts a date relative to today. Valid terms: yesterday, today, tomorrow, last/this/next week, last/this/next month, NEW: last/this/next year. Example: FOR RELATIVE DATE next week.Date==RelativeDate:term=yyyy-mm-dd [timezone]
"Set"A system node you can use in any field. Finds nodes where this field exists and has a value.fieldName==Set
"Not Set"A system node you can use in any field. Finds nodes where this field does not exist, or has no value. Warning: will find many nodes.fieldName==Not set
"Defined" A system node you can use in any field. Finds nodes where a field is defined/used in a supertag template, but might still be empty.HasField:fieldName
"Not Defined"A system node you can use in any field. Finds nodes where a field is not defined/used in a supertag template, or does not exist. Warning: will find many nodes.NOT HasField:fieldName

PARENT/GRANDPARENT (P/GP) field values

Other than inserting the parent/grandparent node relative to the search node, these values have additional features that apply to fields and dates:

They can point to a field on the P/GP node using dot notation.

Example 1: PARENT.Description will point at the Description field on the parent.

Example 2: On a meeting node you could have a search to find other meetings for the related project of this meeting:

  • #meeting
  • >Related project==PARENT.Related project

They can be used for date comparisons under any calendar node

Using PARENT in a search node under a week or year node can now be used for date comparisons such as “find all tasks completed this week”. These date items will get the right granularity (day vs. week/month/year)

Also, PARENT that points at a date or a day/week/year node can do simple arithmetic. PARENT-7 on a day node would get the day 7 days earlier, PARENT+3 on a week node will get a date 3 weeks in the future.

Dot notation and date arithmetic can be combined in a field value

You can combine fields with date arithmetic, so PARENT.Due date+3 will be replaced with a date 3 days ahead of the date in the Due date field.

Search operator examples

Our Navigators have created a Tana Template full of search examples that allow you to interact with many of the operators below to see how they work. They cover the basics and will continuously be updated as we surface more useful examples from the community. Click below to save the resource in one of your Tana workspaces (opens a new tab):

Install: Tana Live Search Examples

Linter

About the linter

In the query builder, see marker 4 for the location of the linter.

The linter uses simple "code" to display the query logic without the fluff of the query builder interface.

By reading the output of the linter, you'll be able to tell if your query is configured as intended or not.

You'll know because all search operators show up in the linter in very specific ways. For instance, the linter will often "transform" from one state to the other as you're adding or typing out the operators. These provide clear clues on whether the operators are correctly setup or not.

See the column "Linter" in the list of search operators for what they should appear like in the linter if properly added.

Reading the linter structure

  • A condition is a question you're asking of Tana.
    • Example: Find all tasks that are not done, and due today.
  • Search operators are used to compose these questions, using one line for each condition. In the linter, they will look like this:
    • TODO
    • NOT DONE
    • Deadline < (RelativeDate:TODAY)
  • All conditions get wrapped in parentheses:
    • (TODO)
    • (NOT DONE)
    • (Deadline < (RelativeDate:TODAY))
  • Every top-level condition gets separated by the AND operator, because it wraps the entire query builder:
    • (TODO) AND (NOT DONE) AND (Deadline < (RelativeDate:TODAY))
  • To use the OR or NOT operators, they are added within the top-level AND operator, nested queries with OR and NOT operators will appear like this:
    • (TODO) AND (NOT DONE) AND (Deadline < (RelativeDate:TODAY)) AND ((Priority==P2) OR (Priority==P3)) AND (NOT Assigned to==Fei)
    • The above query is asking the following: Find nodes that are unchecked, with Deadline before Today, P2s or P3s, and are not assigned to Fei.

Search results

Tana will return results up to 2500 nodes. It is recommended to add more clauses to narrow down the results, and here are a couple of different ways of doing it:

  • Limit by text match: Type the text you want to find and it will filter the results based on node name match. This shows up as (StringMatch: "xyz")
  • Limit by most recently created/edited: Type CREATED/EDITED LAST X DAYS to only get nodes that have been recently created/edited.
  • Limit by field value: A Status field can help you get only tasks that are Next up; an Attendees field can help you find all meetings that had a specific #person in them; a Dietary restriction field can find all your vegetarian recipes.

Examples

Searches in day supertag template

Put a search node in a day supertag template that has a field referencing the PARENT (will show up as "Date: Today, Wed, Oct 18" in linter). This will create searches that find nodes with dates that refer to that day like events, tasks, birthdays.

Searches in supertag template

Put a search node in a supertag template that has a field referencing the PARENT (will show up as INSTANCE in the linter). This will make searches adapt based on the instance. Example: a #person supertag with a search node that looks for all meetings where this #person has attended.

Find overdue tasks (using any field)

If your #tasks have checkboxes and a date field that signifies a due/do date, or deadline, you can build a query in your daily page (important) to find all tasks that are 1. unchecked, and 2. older than today. It will look like this:

  • #task
  • NOT DONE
  • >LT: >Date: PARENT

Related release notes

  • FixedFixed bug where a search node with "DATE OVERLAPS" would sometimes crash the panel ()
  • InfoWe have renamed the search operator "FROM CAPTURE" to "FROM MOBILE" (the old one will still work for backwards compatibility) ()

Related FAQs

Question

  • Find all nodes that use a specific field
    Nov 28, 2024
  • How can I find all nodes that have a specific word?
    Sep 26, 2024
  • Should I use the DUE DATE field?
    Sep 26, 2024
  • What is the difference between the Owner and a Parent of a node?
    Sep 26, 2024
  • How can I search for content that is nested within one or more nodes?
    Mar 07, 2024
  • I need help with date search! How do I do X?
    Feb 13, 2024
  • How can I retrieve tasks dated for today?
    Jan 17, 2024

Examples

  • What is the difference between the field operator CHILD OF and the keyword operator PARENTS DESCENDANTS
    Sep 26, 2024

    The search operators CHILD OF and PARENTS DESCENDANTS are similar, but have some key differences:

    • With CHILD OF, the target node is the node that you reference in it, and the results will only be direct children of the referenced node, including references
    • With PARENTS DESCENDANTS, the target node is the parent relative to the search node, and the results will match any descendant (children, grandchildren, great grandchildren etc.) of the target node, ignoring reference nodes
    • With PARENTS DESCENDANTS WITH REFS, the same as PARENTS DESCENDANTS except it includes reference nodes.
    Source of FAQ: Tana Community Resource Hub, rewritten for clarity
  • How can I find all tags that extend a tag?
    Sep 26, 2024

    One way is to create this search node:

    • >system field Tags : #tag (use supertag that was extended)
    • IS TAG

    Example:

  • Can I create search nodes using Tana Paste?
    Sep 26, 2024

    Yes you can: We have a basic syntax for this which you can read about here.

    Example of a task search:

    %%tana%%
    - %%search%% Fei's tasks
    - OR::
    - [[#task]]
    - [[#CS todo]]
    - Assigned to::
    - [[Fei-Ling Tseng]]
    - NOT DONE

    When I paste the above, this is the result:

  • How can I get the Task list on my daily notes (back again)?
    Sep 26, 2024

    You may have seen a Tana setup that had a task list on the daily notes page, or even had one from early prototypes from us, and it somehow disappeared now.

    There is a simple way to get it back.

    Go to any daily note, and make a search that looks for:

    1. all #task nodes
    2. NOT DONE

    Run it to confirm it's fetching the right things.

    Adjust how you want your tasks to look (Set all view options here, like Display, Group, Sort options)

    Confirm changes to the view options and the query. Right-click on the title of the search, and select Move to Related content.

    Here's a video showing the steps above:

  • How can I find references in one workspace that are owned by another?
    Sep 26, 2024

    To find all references in a workspace that are owned by another workspace:

    1. Go to your workspace home

    2. Create this search as a direct child of the workspace home node:

    • GRANDPARENTS DESCENDANTS WITH REFS
    • >NOT GRANDPARENTS DESCENDANTS

    To limit the search to specific workspaces, add the system field Workspace and specify the workspaces you want to target there.

  • How to find nodes with empty/not set descriptions
    Sep 05, 2024

    You can use regex to find this:

    • Add a reference to the area you want to search within
    • >NOT >Node description:: /.+/
  • How to find URL nodes
    Sep 05, 2024

    While there isn't a search operator to target URL nodes, they all use a system-defined node to store the URL. You can grab the field definition for it in one of the URLs. and it will retrieve all nodes that use this field, which will be mostly URL nodes.

    Note that the pasting of the URL search node into the search is to limit the search to only children within that node.