Files
janssen/Soubory/priklady_dotazu.md
2026-06-05 21:21:30 +02:00

8.3 KiB

Příklady dotazů — MCP soubory

10 příkladů od nejjednoduššího po nejsložitější. Každý je nejdřív stručně, pak rozepsaný.

Volání je přes search(...). V Claude chatu se ptáš normálně česky ("najdi mi…") a Claude pod kapotou volá mcp__soubory__search(...). Tady ukazuju přímé volání tak, abys viděl co se kombinuje.


Přehled (od nejlehčího po nejtěžší)

# Příklad
1 search("randomization")
2 search("adverse event")
3 search('"protocol deviation"')
4 search("randomization", ext=["xlsx","xlsm"])
5 search("SAE", study="UCO3001", ext=["eml","msg"])
6 search('"kit number"', folder="CRF", since="2025-06-01")
7 search("adverse OR serious -mild")
8 search('"serious adverse event" -draft -obsolete', ext=["docx","pdf"])
9 search('icotrokinra placebo', study="UCO3001", folder="Training", limit=30)
10 search('"lot expiration" OR "expirační" OR "expiry"', ext=["eml","msg","pdf"], since="2025-01-01")

1. Nejjednodušší — jedno slovo

search("randomization")

Co to dělá: Najde všechny dokumenty z obou studií, které kdekoli v textu obsahují slovo "randomization". Bez filtru typu souboru, studie, ani data. Vrátí 15 nejlépe rankovaných.

Kdy použít: Když máš jen obecné slovo a nevíš kde to může být. Dobré pro první nástřel — uvidíš, ve kterých typech souborů a v kterých složkách se to vyskytuje.

Trik: Slovník indexu používá unaccent, takže príloha najde i priloha (diakritika neřeší).


2. Dvě slova — implicitní AND

search("adverse event")

Co to dělá: Najde dokumenty, kde se vyskytují obě slova "adverse" a "event" — ale kdekoli v dokumentu, nemusí být vedle sebe. Mohou být klidně na různých stranách.

Kdy použít: Když chceš zúžit širší slovo (adverse samotné by našlo i adversely). Dvě slova = silnější rank.

Rozdíl proti #3: "adverse" může být na straně 5 a "event" na straně 150 — pořád match.


3. Přesná fráze

search('"protocol deviation"')

Co to dělá: Najde dokumenty, kde jsou tato dvě slova přímo vedle sebe v tomto pořadí. "protocol of deviation" už nematchne, "deviation from protocol" taky ne.

Kdy použít: Pro odborné termíny, názvy formulářů, ustálené fráze. Mnohem ostřejší než AND.

Pozor: Uvozovky musí být přesně "..." (PowerShell může vyžadovat escape: '"protocol deviation"').


4. Filtr typu souboru

search("randomization", ext=["xlsx", "xlsm"])

Co to dělá: Stejné jako #1, ale jen v Excelech (.xlsx + .xlsm). Užitečné když víš, že to bude v tabulce — typicky randomizační listy, IWRS exporty.

Kdy použít: Když chceš najít data, ne dokumentaci. Excel = data tabulky, PDF/DOCX = popis.

Tip: Metadata v odpovědi obsahují sheet_names — uvidíš ve kterých listech to může být. Pak otevřeš ten Excel rovnou na správném listu.


5. Studie + typ — kombinovaný filtr

search("SAE", study="UCO3001", ext=["eml", "msg"])

Co to dělá: Najde emaily (EML i MSG) z UCO3001 studie, které obsahují slovo "SAE" (Serious Adverse Event). Metadata vrátí from, to, subject, date, počet příloh.

Kdy použít: "Kdo mi psal o SAE případu" — typický audit dotaz.

Trik: Kombinace study + ext je výkonná — Postgres má index (study, ext) přímo na to.


6. Tři filtry — fráze + složka + datum

search('"kit number"', folder="CRF", since="2025-06-01")

Co to dělá: Najde dokumenty obsahující frázi "kit number", ale jen ty uložené v jakékoli složce s "CRF" v názvu, a modifikované od 1. června 2025 dál.

Kdy použít: Když si pamatuješ kontext ("bylo to v CRF dokumentaci po SIVu") ale ne celý text.

Jak to funguje pod kapotou:

  1. Postgres najde fulltextové matche
  2. Mongo dotáhne parent_folders a mtime
  3. Filtruje se v Pythonu — proto se to dělá jako AND nad všemi třemi

7. OR + NOT — logické operátory

search("adverse OR serious -mild")

Co to dělá: Najde dokumenty, kde je buď "adverse" nebo "serious", ale nesmí obsahovat slovo "mild".

Kdy použít: Když máš více synonym a chceš jeden dotaz místo tří. -mild vyloučí typicky tréninkové materiály ("mild AE example") nebo nezávažné případy.

Důležité — priorita operátorů:

  • A OR B C se vyhodnotí jako A OR (B AND C)
  • websearch_to_tsquery nemá závorky — nemůžeš to přeskupit
  • Když potřebuješ jiné pořadí, rozděl na dva dotazy

8. Fráze + dvě vyloučení + ext filtr

search('"serious adverse event" -draft -obsolete', ext=["docx", "pdf"])

Co to dělá: Přesná fráze "serious adverse event", ale bez dokumentů obsahujících slova "draft" nebo "obsolete", a jen v Wordech a PDFkách.

Kdy použít: Když chceš jen finální verze dokumentů. V Dropboxu typicky najdeš 5 verzí toho samého (draft, v0.9, v1.0, v1.0_FINAL, OBSOLETE) — tohle odřízne šum.

Kombinace technik: fráze + vícenásobné NOT + typ. Reálné dotazy v práci vypadají takhle.


9. Dvě AND slova + 2 filtry + víc výsledků

search("icotrokinra placebo", study="UCO3001", folder="Training", limit=30)

Co to dělá: Najde tréninkové materiály z UCO3001, kde se mluví jak o léku icotrokinra, tak o placebu (typicky srovnání ramen studie). limit=30 místo defaultních 15.

Kdy použít:

  • Onboarding nového člena týmu — "dej mi všechny prezentace co srovnávají větve studie"
  • Příprava na monitorovací návštěvu
  • Hledání edukačního obsahu pro pacienty

Proč 30: Tréninkových materiálů bývá hodně verzí (každý SIV nové), default 15 by jich pravděpodobně neukázal všechny.


10. Nejtěžší — vícejazyčné OR + tři typy + datum

search(
    '"lot expiration" OR "expirační" OR "expiry"',
    ext=["eml", "msg", "pdf"],
    since="2025-01-01"
)

Co to dělá: Najde dokumentaci a komunikaci o expiraci léků z roku 2025. Hledá ve třech jazykových variantách (EN fráze "lot expiration", CZ "expirační", krátké "expiry") napříč emaily, MSG soubory a PDFkami.

Kdy použít: Typický compliance dotaz — "ukaž mi všechno co tento rok řešilo expiraci kitů". Kombinuje:

  • vícejazyčnost (sponsor píše anglicky, ty notifikuješ česky)
  • více kanálů (emaily i oficiální PDF dokumenty)
  • časové okno (relevantní jen letošek)

Pod kapotou:

  1. PG fulltext spojí 3 OR větve do jednoho tsquery
  2. Filtr ext IN ('eml','msg','pdf') na PG úrovni
  3. Filtr since na sloupec mtime (indexovaný)
  4. Mongo metadata: u emailů from/to/subject, u PDF pages/author
  5. Výsledky setřízené podle ts_rank (nejvíc relevantní nahoře)

Tohle je ten případ kdy nakombinuješ úplně všechno a Claude ti pak v chatu napíše: "Našel jsem 8 dokumentů. 3 emaily od monitorky z března, 1 PDF notifikace IWRS z června, ...". Přesně proto jsme to stavěli.


Shrnutí — pravidla palce

  • Začni jednoduše (1 slovo) → uvidíš co je v korpusu → zužuj
  • Fráze ("...") je vždy ostřejší než AND
  • -slovo je tvůj nejlepší kamarád proti šumu (draft, obsolete, training)
  • ext=[...] dramaticky zrychlí dotaz a vyfiltruje formátový šum
  • folder=... funguje skvěle pokud máš konzistentní strukturu složek (#190 eCRF, #200 Training, …)
  • since=... používej kdykoli tě zajímá "co je nového"
  • Diakritika neřešíexpirace najde i expirační (oboje má root expira)
  • Není wildcardrandomiz* nefunguje, ale randomization a randomized jsou různá slova → dej je do OR

Co když fulltext nestačí?

Jiné nástroje MCP:

  • by_author("Hazzard") — kdo psal/upravoval (DOCX/PPTX metadata)
  • recent_files(days=7) — co se změnilo bez ohledu na obsah
  • find_duplicates() — kolikrát mám stejný soubor
  • browse_folder("CRF") — výpis složky bez fulltextu
  • read_document(path=..., around_match="randomization") — skok přímo na slovo v dlouhém dokumentu