Search Syntax Documentation

I'm not sure what that means. So how would implicit operators work? What is the precedence?
Even with Naveen's example above tag:t1 tag:t2 or tag:t3 -tag:t4 there are several problems. There's or and there's -. The precedence is a problem, because people need to learn a new form of writing boolean logic. I haven't evaluated it yet, but certain things won't be possible without parenthesis. Even in RPN we need operators.

So how would you write the following with implicit notation?

( (tag1 && tag2) || (tag3 && tag4) ) && !(tag5 && tag6)

Yes, not everything can be expressed if we keep things simple. If we want and/or, we indeed also need parenthesis and an AST, but do we need that degree of complexity? For some queries, maybe, but it's like 1-2% of queries probably. The vast majority will just be typing a word and getting the results, and we also offer things like notebook: and tag: for advanced usage.

Even more advanced would be something close to SQL, but I don't think we need to get there.

Hmm, a lot of people had the issue that boolean search was not possible. That was the biggest complaint about search functionality.

If it won’t be possible after this project, why are we doing this project in the first place?

If it won’t be possible after this project, why are we doing this project in the first place?

I don't think that comment is useful as obviously Naveen's proposal includes a lot more features that the current search engine.

Maybe it would be useful to define what use-cases we're trying to support? "tag:tag1 OR tag:tag2", etc. is good to discuss implementation but it's not a real life example. In what case would a system with SQL-like queries be absolutely necessary?

Also if a user really needs AND/OR, can't they organise their notes slightly differently so that it's not needed any more? I know that if my notes were organised in a such a way that complex SQL-like queries are needed to retrieve them, then I'll just re-organise them in a less complicated way.

Sorry, I was too less precise in the wording of my question. I rather meant, why did we add a search improvement project to the list of ideas for GSoC, if the result will not alleviate the biggest pain point people have with search.

It is certainly clear to me that Naveen is improving the overall search experience and that he's doing a great job. I just don't underatand the logic behind a decision to willfully make a technical solution less useful. We can't talk about boolean search when there are no boolean operators.

In what case would a system with SQL-like queries be absolutely necessary?

I'm very sorry to contradict you, but this is not SQL-like. SQL is based on relational algebra. Boolean operators are just a small part of the SQL language. The fact that the boolean logic is translated to SQL in the backend is another story.

To answer your question: you always need boolean operators and logic when you want to search for anything that intersects, or does not intersect, or does not or does include a certain element(s), and/or a combination of thereof.

can’t they organise their notes slightly differently so that it’s not needed any more?

This is not possible. e.g. take notes for recipes. Let's say you used tags for the ingredients - or even if you didn't use tags but just the text in the body for that:

How would you search for recipes that include the ingredients A and B, but not C or D, and require cooking instrument E to prepare the food?
How do you restructure your note and tags to get that search result?

Let's distinguish between "useful" boolean search and "complete" boolean search.

For example, Stackoverflow's tag search is quite useful.

They support or between tags (but not between text terms) like this: [tag1] or [tag2]

You can also exclude tags using -[tag3].

But it's not a "complete" boolean tag search.

For example if we search for ( [python] -[keras] ) or [javascript]
then the "or" is just interpreted as text and it searches for all posts with python and javascript tags without keras (which is not really what I meant).

So they seem to have compromised on the full power of boolean search in favor of reduced complexity.

I don't think we need an explicit OR operator for this. Wouldn't this work?
tag:A tag:B -tag:C -tag:D E (assuming ingredients are tags and cooking instrument is text)

Sorry for my ignorance and intruding on this post. I have one question. Does anyone use Anki to learn something?

I ask because of the discussion here. Should search be improved or not due to complexity.

Anki is an open-source, not extra complicated app where you can have a query like:

deck:A -tag:B tag:C (tag:D OR card:E)

It allows any possible queries for filtering cards with any parameters. Therefore, is it possible to have a glance at Anki code to see how it works? AFAIK it is written in Python. Maybe their solution will be applyable for us?

1 Like

How do I search for a literal character? For example, I want to search for any task or note that contains the character "$" (dollar sign). Thanks.

1 Like

Do a basic search.

/$

3 Likes

Hi! Does anybody know how to properly search the content for the presence of a certain domain in links in the notes. For example, if I want to find all notes which contain outdated links to other notes created in Evernote:

` [Link](evernote:///view/url-slug) `

When I input evernote:///view/ or evernote:/// in the search field I get the entire list of notes in the search results. Perhaps I need to use some construction to search by keyword in the ULR?

you can try this search: /"evernote:///view"

Thank you very much @JackGruber! You helped me a lot.

Or you could quote the string, "evernote:///"

Won't work. You have to use basic search.

Hi @naviji "evernote:///" does not work!
It will findes alle notes with the word evernote not only evernote:/// !

From the documentation:

One drawback of Full Text Search is that it ignores most non-alphabetical characters. However in some cases you might want to search for this too. To do that, you can use basic search.

Hi,
so if I understand correctly, I have to use "Basic Search" to search for open checkboxes: /"- [ ]"
Using basic search means I cannot use any of the search logic, e.g. like: notebook:A
Therefore, it is not possible to define a search for: "notes with open checkboxes in notebook A"?

I think it is critical to allow such simple combinations.
Maybe we could introduce at least a special searchterm for checkboxes?
For example: checkbox:0 for incomplete checkboxes and checkbox:1 for completed checkboxes.

2 Likes

Making the search logic work with "basic search" shouldn't be that difficult. I'll look into it.

2 Likes

Any news on this? I really really miss the possibility to search for open checkboxes in certain notebooks. Especially since there are embedded search and saved search favorites now :slight_smile:

1 Like

The questions raised above do all look quite valid, while the search feature is already nice as it is. But one thing strikes me, like it does in many other apps, and other software products.
Any user compelled to repeat the same steps 16 - 64 times a day knows it. The command or sequence of commands works just fine, but the number of mouse clicks or key strokes to be repeated over and over again is a pain.

If I want to search for X in the title, do I really have to type
t i t l e : X, .... using 8+ keys ?

Or could it be t/X or anything else that works and is as short as possible ? I cannot imagine that adherence to a standard set elsewhere really matters. If it does ... could we implement title: (etc.) for the good and bad, and t/ for the ugly ?

2 Likes

Hey,
can I also exclude sub notebooks from a search?
I have the following notebook structure

Notebook
    Task 1
    Task 2
   Subnotebook
        Task 3
        Task 4

And I don't want Task 3 and Task 4 to appear in my search
I tried:

notebook:"Notebook" -notebook:"Subnotebook"

But I don't get what I expect

The problem is that the notebook filter was not allowed to be negated.

I've made a PR with the fix. Should be merged soon.

3 Likes