· Fundacja Reborn

Wyszukiwanie z operatorami w Reborn Task i Reborn Notes

10+ operatorów wyszukiwania - tag:, due:, folder:, is:overdue, has:link i więcej - plus boolean OR / AND / grupowanie. Ujednolicone pole, po stronie klienta, zero-knowledge.

wyszukiwanie funkcja zero-knowledge
Read in English →

Zarówno Reborn Task, jak i Reborn Notes mają już ujednolicone pole wyszukiwania, które łączy wyszukiwanie po tekście z operatorami strukturalnymi. Zwykłe słowa dopasowują się do tytułu jako podciąg; operatory pozwalają zawęzić wyniki po tagu, folderze, liście, datach, flagach i kilku innych wymiarach. Na to nakłada się kompozycja boolowska (OR, AND, grupowanie nawiasami, negacja grupy).

Całe dopasowywanie zachodzi po stronie klienta, na już rozszyfrowanych danych - operatory są przetwarzane tym samym, lokalnym torem co zwykły tekst. Serwer w żadnym z tych przypadków nie widzi zapytania ani wyników.

Ten wpis streszcza, co ta funkcja robi i jak ułożona jest składnia. Pełna gramatyka, włącznie z corner case’ami i regułami cudzysłowów, znajduje się w dokumentacji operatorów.

Skrót operatorów

OperatorGdziePrzykłady
tag:NAZWAre/notestag:work, tag:"side projects"
folder:ŚCIEŻKAre/notesfolder:projects, folder:projects/active
list:NAZWAre/tasklist:Inbox, list:"this week"
created:DATAobiecreated:2026-01-01, created:>2026-01-01, created:<7d, created:today, created:2026-01-01..2026-02-01
modified:DATAobiemodified:<14d, modified:yesterday
due:DATAre/taskdue:<7d, due:today, due:>2026-06-01
is:starredobieis:starred
is:pinnedre/notesis:pinned
is:completedre/taskis:completed
is:overduere/taskis:overdue
has:linkobiehas:link (dopasowuje notatki/opisy zawierające URL-e lub linki Markdown)

Modyfikatory

  • -OPERATOR - neguje pojedynczy operator. Przykład: -tag:archived, -is:completed.
  • -SŁOWO - wyklucza elementy, których tytuł (lub treść, gdy aktywna jest ścieżka body-aware) zawiera dane słowo. Przykład: cat -mouse.
  • "wartość w cudzysłowie" - zachowuje spacje i dwukropki. Wewnątrz operatora: tag:"in progress", list:"Q2 planning". Jako zwykły tekst: "meeting prep" dopasowuje dosłowną frazę, a nie dwa słowa niezależnie.
  • -"wartość w cudzysłowie" - wyklucza frazę. Przykład: cat -"angry mouse".

Łączenie klauzul

Spacja między klauzulami to niejawne AND. Każda klauzula musi być spełniona jednocześnie - operatory między sobą, operatory ze słowami zwykłego tekstu, a także wykluczenia:

meeting tag:work -is:completed modified:<14d -draft

…dopasowuje elementy zawierające słowo meeting, otagowane work, jeszcze nieukończone, zmodyfikowane w ostatnich 14 dniach i niezawierające słowa draft.

Operatory boolean

Poza niejawnym AND pole wyszukiwania obsługuje jawne OR, grupowanie nawiasami oraz negację grupy. Jawne AND jest też rozpoznawane jako redundantny synonim.

tag:work OR tag:personal                       # pasuje którykolwiek tag
is:completed OR is:overdue                     # ukończone lub zaległe
tag:work (is:starred OR modified:<7d)          # praca + (z gwiazdką LUB ruszone niedawno)
(tag:reading AND has:link) OR is:starred       # reading z linkiem, albo cokolwiek z gwiazdką
-(tag:archived OR tag:draft)                   # ani archived, ani draft

OR i AND muszą być zapisane wielkimi literami, ze spacjami wokół - taka sama konwencja jak w Gmailu, GitHubie i Linearze. Małymi literami (or, and) traktowane są jako zwykłe słowa. Aby wyszukać dosłowny ciąg OR, wstaw go w cudzysłów: "OR".

AND wiąże silniej niż OR, więc cat dog OR mouse parsuje się jako (cat AND dog) OR mouse. Puste grupy (()) są ignorowane, a zbędne zagnieżdżenia w stylu ((cat)) zwijają się naturalnie. Cudzysłowy zawsze zachowują znaki dosłownie - OR, AND, ( i ) w cudzysłowie są częścią wartości, a nie składni boolowskiej.

Wyrażenia dat

Trzy pola przyjmują wyrażenia dat: created: (znacznik utworzenia), modified: (ostatnia aktualizacja) oraz due: (tylko re/task). Wszystkie trzy korzystają z tej samej gramatyki.

Daty bezwzględne

created:2026-01-15              # dokładnie ten dzień
created:>2026-01-15             # po tym dniu
created:<2026-01-15             # przed tym dniem
created:2026-01-01..2026-01-31  # zakres, oba końce włącznie

Format zawsze YYYY-MM-DD. Niepoprawne daty (np. 2026-02-30) po cichu degradują się do wyszukiwania zwykłego tekstu.

Zakresy względne

modified:<7d   # w ciągu ostatnich 7 dni
created:<2w    # w ciągu ostatnich 2 tygodni
modified:>1m   # starsze niż miesiąc
due:<3d        # do oddania w ciągu 3 dni  (`due:` patrzy w przód)

Jednostki: d (dni), w (tygodnie = 7 dni), m (miesiące ≈ 30 dni). Konwencja kierunku: < celuje w „teraz” (świeże), > ucieka od „teraz” (starsze).

Słowa kluczowe

created:today
modified:yesterday

Daty są interpretowane w lokalnej strefie czasowej, nie UTC - „today” odpowiada zegarowi na ścianie.

Tekst zwykły i przełącznik treści

Słowa zwykłe dopasowują się jako podciąg do:

  • Tytułów - zawsze, natychmiast, bez deszyfrowania.
  • Opisów (re/task) / treści (re/notes) - tylko gdy włączony jest przełącznik Szukaj w opisie / treści. Deszyfrowanie zachodzi w pamięci; serwer nigdy nie widzi zapytania.

Operatory wymagające treści notatki/zadania - obecnie tylko has:link - automatycznie wymuszają ścieżkę body-aware, nawet gdy przełącznik jest wyłączony.

Wiele słów zwykłych łączy się przez AND: meeting prep wymaga, by meeting i prep pojawiły się niezależnie. Dla dosłownej frazy użyj cudzysłowu: "meeting prep".

Wyszukiwanie w koszu

Obie aplikacje mają wydzielony widok kosza, a pole wyszukiwania zawsze przeszukuje tylko bieżący zakres - elementy aktywne w widokach normalnych, elementy usunięte w widoku kosza. Nie ma operatora łączącego oba zakresy; aby przejrzeć usunięte elementy, należy przełączyć się do widoku kosza. Wszystkie operatory powyżej (tag, folder, list, daty, …) działają również na zawartości kosza.

Jest to celowe: wyszukiwanie łączące oba zakresy pokazywałoby nieaktualne dopasowania w codziennych zapytaniach. Przyszła wersja może wprowadzić jawny tryb ujednoliconego wyszukiwania.

Wybaczająca degradacja

Jeśli parser nie rozpozna tokenu (literówka typu taq:work, niepoprawna data, wiszące OR/AND, niedomknięty nawias), traktuje niepoprawne operatory jako tokeny zwykłego tekstu zamiast zgłaszać błąd. Zapytanie staje się mniej precyzyjne, dopóki składnia się nie domknie - nie pojawia się czerwony stan błędu w trakcie pisania.

W praktyce:

  • created:tomorrow - nie ma takiego słowa kluczowego (obsługiwane są tylko today i yesterday). Cały token jest wyszukiwany jako dosłowny ciąg.
  • tag: (bez wartości) - degraduje się do zwykłego tekstu.
  • Nieznane nazwy operatorów (status:done, priority:high, …) - traktowane jako zwykły tekst. W przyszłej iteracji mogą stać się prawdziwymi operatorami.

Jeżeli zapytanie „nie działa po Twojej myśli”, najczęstszą przyczyną jest literówka po cichu degradująca się do zwykłego tekstu. Sprawdź nazwę operatora i format wartości w tabeli powyżej.

Prywatność i architektura

Dodanie operatorów nie zmieniło modelu zagrożeń. Każdy krok dzieje się lokalnie:

  1. Zaszyfrowana baza jest deszyfrowana w pamięci po odblokowaniu.
  2. Pole wyszukiwania parsuje zapytanie do AST (drzewa składniowego).
  3. AST jest ewaluowany na in-memory indeksie metadanych - tytuły, daty, tagi, flagi.
  4. Jeśli zapytanie wymaga treści (has:link lub przełącznik treści), deszyfrowane są wyłącznie elementy wstępnie pasujące.
  5. Nic nie trafia na serwer. Brak server-side search endpointu, brak inverted indexu, brak telemetrii zapytań.

Pełen opis architektury w Zero Knowledge Architecture.

Roadmapa

Kilka funkcji dla zaawansowanych jest zaplanowanych jako fast-follow:

  • Zapisane wyszukiwania - przypnij zapytanie typu due:<7d -is:completed i otwieraj je jednym kliknięciem.
  • Smart foldery - zapisane wyszukiwania jako wirtualne foldery w sidebarze.
  • Kolejne operatory - kandydaci: priority:, status:, traversowanie hierarchii list i folderów.

Pełen opis, włącznie z corner case’ami i regułami cudzysłowów, jest w dokumentacji operatorów.


Nie znasz jeszcze Reborn Apps? Wypróbuj je na naszej publicznej instancji - darmowej, zero-knowledge, bez emaila. Albo postaw własną.

Podziękowania

Słownik operatorów i rozłożenie ich na tiery (najpierw esencja, power-user feature’y jako fast-follow) wzięły się ze szczegółowego feedbacku od Travisa Solina (@computrav).