diff --git a/Search.md b/Search.md index c650cd9..6ee087c 100644 --- a/Search.md +++ b/Search.md @@ -1,3 +1,5 @@ +** Text below describes features as of Trilium 0.31 ** + Trilium supports searching in notes. There are several ways to search notes: * full text search - search in text and [[code note|code notes]] content. Since this is implemented as a database search, this works only for not protected notes (doesn't matter if you're in protected session or not) @@ -5,7 +7,7 @@ Trilium supports searching in notes. There are several ways to search notes: * [[attribute|Attributes]] search - you can e.g. search for notes having certain label - see *Attribute query syntax* below. * you can save search string (composed of either fulltext or attribute search) into so-called "saved search" note. If you expand this note, you will see the search results as child notes. - * saved search can also reference [[scripts|script]] through relation - upon expanding, the script will provide a list of results + * saved search can also reference [[script|scripts]] through relation - upon expanding, the script will provide a list of results You can activate search by clicking on magnifier icon on the left or pressing `CTRL-S` keyboard [[shortcut|keyboard shortcuts]]. @@ -13,34 +15,32 @@ You can activate search by clicking on magnifier icon on the left or pressing `C Fulltext search is triggered whenever search string doesn't start with `@` (used in attribute search) or `=` (saved search with script). You can enter any text, but only alpha numeric words are being searched. -Fulltext searches on undeleted, unprotected text and code notes which are not archived. +Fulltext searches on both title and content of undeleted, unprotected text and code notes which are not archived. Fulltext is implemented using Sqlite's [FTS5](https://www.sqlite.org/fts5.html). This provides some advanced functionality, e.g. "NEAR(heavy metal)" will match notes only if a word "heavy" is close to "metal". But since this syntax is quite specific and easy to get it wrong, it is accessible only via `@text` virtual attribute. Such query would then look like this: `@text="NEAR(heavy metal)"` ## Attribute query syntax -Following examples demonstrates syntax: +### Standard attributes -
  • Just enter any text for full text search
  • -
  • @abc - returns notes with label abc
  • -
  • @year=2019 - matches notes with label year having value 2019
  • -
  • @rock @pop - matches notes which have both rock and pop labels
  • -
  • @rock or @pop - only one of the labels must be present
  • -
  • @year<=2000 - numerical comparison (also >, >=, <).
  • -
  • @dateCreated>=MONTH-1 - notes created in the last month
  • -
  • =handler - will execute script defined in handler relation to get results
  • +Here you query by standard [[attributes]]: -* ```@abc``` - matches notes with label abc -* ```@!abc``` - matches notes without abc label (maybe not the best syntax) -* ```@abc=true``` - matches notes with label abc having value true -* ```@abc!=true``` -* ```@"weird label"="weird value"``` - works also with whitespace inside names values -* ```@abc and @def``` - matches notes with both abc and def -* ```@abc @def``` - AND relation is implicit when specifying multiple labels -* ```@abc or @def``` - OR relation -* ```@abc<=5``` - numerical comparison (also >, >=, <). -* ```some search string @abc @def``` - combination of fulltext and label search - both of them need to match (OR not supported) -* ```@abc @def some search string``` - same combination +* `@abc` - returns notes with label abc +* `@year=2019` - matches notes with label `year` having value `2019` +* `@year!=2019` - marches notes with label `year`, but not having value 2019 or not having label `year` at all. + * if you want to express condition that note must have `year` label, but not value 2019, then you can do that with `@year @year!=2019` +* `@year<=2000` - return notes with label `year` having value 2000 or smaller. `>`, `<`, `>=` and `<=` are supported. + * In this case parameter can be parsed as a number so number-wise comparison is done. But it's also possible to compare strings lexicographically in the same way. This is useful for comparing dates as seen below. +* `@rock @pop` - matches notes which have both `rock` and `pop` labels + * `@rock and @pop` is an alternative syntax for the same thing +* `@rock or @pop` - only one of the labels must be present + * `and` has a precedence over `or` in case both operators are used in a search string +* `@frontMan=*John` - matches notes where `frontMan` label starts with "John". There's also `!=*` for "doesn't start with", `*=` for "ends with" and `!*=` for "does not end with" + + + + +* `@dateCreated>=MONTH-1 - notes created in the last month ## Saved search