There are three parts to this project.
I spent the week mostly learning about the finer details of how to go about implementing them.
I made an intermediate layer (parser) for the search queries. Using some regular expressions, we can now split the search query into its components.
Here is a draft pull request: https://github.com/laurent22/joplin/pull/3213
It’s now able to handle all the existing search syntax. I also made some improvements.
First, there was inconsistency in how the title and body filter worked compared to others.
eg. Let’s say I search for
This doesn’t work.
So let’s say we try this
This might work. But what it’s actually doing is searching for notes that have “open” in the title and “source” in the body or title. If we really wanted the title to contain both “open” and “source”, we had to do this
I fixed it so that the first search syntax works. Ditto for the body.
I also added a new filter, tags. So you can now do this.
tag:office tag:urgent OR tag:important
If you have any suggestions regarding the syntax in my proposal please let me know.
Project proposal.pdf (84.8 KB)
There has been a change of plans here. Joplin uses Full Text Search 4, while fts5 already has the ranking function I proposed to implement built in. The current plan is to upgrade Joplin to fts5 if possible and use this instead.
Spellfix is an extension that can give us the most similar words for a given search term. I currently plan to augment the text search with three similar words that spellfix gives us to do the fuzzy search.
Getting spellfix working on all platforms is the next task. Currently, it works for both Windows and Linux.