Make tag suggestion modal fuzzy-er

Use case or problem

I noticed that in 0.9.21, fuzzy matching was implemented, but IMO it’s not fuzzy enough :slight_smile:. After bringing this up here, it was deemed better to open a new feature request for this so here I am!

To quote myself directly, this is an example that I gave:

For example, say I have a tag #some/tag/hierarchy, ideally I’d like to see results returned if all I typed were #tagarchy. This is how systems such as OmniFocus behave, if you’re familiar with that tool.

IMO, currently tag search isn’t the greatest. Let’s say you have a lot of nested tags under one parent; if you don’t remember the full path but you do remember one of the tag’s parents, finding it by typing just the parent and the sub-tag might not produce the right results, and worse, might not return results at all. Let me further explain.

Say we have a more exaggerated nesting structure for a tag, like #foo/bar/baz/biz, where the bar and baz parents have many descendants, and even let’s say that biz is in several of the parent tags (and there are many other parent tags that I’m not going to type out for this example). We run into issues trying to find that tags such as:

  • Typing just the tag that I want, biz, might return too many results
  • Typing one of the parent tags (say bar) and you don’t remember exactly which subdirectory biz is in, you’ll still need to go through all of the baz-level descendants to find the biz tag you want
  • As noted above, typing barbiz doesn’t return anything at all, since Obsidian is not supplying an implicit wildcard between them

Proposed solution

I think that Obsidian should attempt to match anything it can based on what is given by the user, with a “ranking” algorithm that matches the text supplied from the closest match it can find to the most lenient match it can find. Some example applications that do things like this are:

  • OmniFocus’ tag system
  • Basically any IDE or code editor that has an autocomplete functionality (I’m thinking of VSCode when I am typing this up)

Current workaround (optional)

Currently there isn’t a workaround that I know of - basically when you start typing, you need to know the rest of the tag from then on

Please let me know if you need any additional details about the above! I’d even be happy if this was just a setting to turn on.

17 Likes

Please Please Obsedian people implement this feature. My tags are deeply nested and it is starting to be a real nightmare…It might result in entering the subtag twice in two different places without noticing it.

2 Likes

The following might be a ‘partial’ workaround, just to get the path of the child tag
The Idea:
Tags are written as text in the note, but prefixed with hash.
The child tag is preceeded by slash.
So the idea is to use these two feautres as follows:

  • Search for text (not tag) using the following format:
    “/childtag”
  • The notes containing that child tag will appear in the list.
  • Hover over any note, you’ll see the full path of the tag… then you can use it in your new not.

It is not a perfect solution, but at least it shows the exacpt path of the subtag if it exists

Second this request.

Am I missing something? I am getting NO fuzziness. For example, plural tags don’t show when I search for the singular. (E.G tag:airline does not return results with the tag “Airlines”. What am I missing?

Hopefully we can get some traction on this and re-surface it. I am trying to use tags more in my notes instead of always creating [[links]] but the lack of fuzzy matching is frustrating. I actually don’t think tags currently are fuzzy at all… I would say they allow for “partial matches” but fuzzy to me is like what the OP describes. Here is my similar example below that I posted in Discord server:

Has there been any talk about making #tag suggester / autocomplete fuzzy? I am trying to leverage #tags more as opposed to [[links]] for certain types of things in my notes but find myself time and time again wishing the tag autocomplete was fuzzy. For example if I have a tag #dev/idea/frontend/search and then I type #devsearch it would be amazing if it showed as a match.

Also to avoid confusion, because some of the comments above seem to be talking about when “Searching” for tags in the search view… I am talking about when auto completing tags while typing in my notes.

For me the perfect solution is to just implement exactly how [[page linking]] works as it is the exact kind of fuzzy I would like and expect for tags.

2 Likes

+1 for this FR
I do not use nested tags a lot because of this reasoning

Often I am entering notes from my Android phone & the lack to use a fuzzy search with auto populate makes it a pain when on the phone. Still a pain from the PC but when time is against me in the field (which is often) I find even a higher level of friction

As mentioned here

Make tag suggestion modal fuzzy-er - #6 by smurfman111

I am upvoting the idea for populating the fuzzy search in regards to the nested tags

1 Like

Please add this feature. Nested tags are a pain without a fuzzier search. At the very least add the ability to toggle this feature.

1 Like

Another one here throwing their support into the cup here, tag search is way too strict for nested-tags to make proper sense. This already breaks down using #people/FirstnameSurname where you usually would only tag as #people/Surname. However, for futureproofing you end up using the Firstname as well. And now you end up having about 270 tags you cannot filter through effectively without being in pain.

The same needs to be employed when writing tags, if I type out #people/alein, I want a fuzzy recommendation for #people/AlbertEinstein, not no results.

1 Like

I’m not sure how feasible this is, but perhaps Obsidian could use fzf as its tag searcher/sorter? I use it in my terminal and in tools like Neovim all the time, and it’s fuzzy searching is almost always good enough for my needs.

What’s the best way to get a response from someone from Obsidian about this, at least as far as priorities go? I feel like this has to be doable — I agree with @smurfman111 in this comment that there is already a sufficient fuzzy-matching algorithm in Obsidian, just needs to be applied for this use case somehow. I still heavily rely on tags and this is basically making it very difficult to use Obsidian long term.

+1 for this!!

I also don’t get any fuzziness in my tag search. Is there a setting to enable it? As it is I either type `tag:’ and get a list of all my tags, or I have to type the tag I want exactly in order to get results.

I think I’m looking for something similar. I haven’t started using nested tags yet and will look into this. However I have been using a method from way back which relies on wildcards.

e.g. I may have a tag #house and another #house-garage.

What I was hoping to do was to say search for #house if I just want “house” or #(wildcard)house(wildcard) to see both. Or just #house-garage if I just wanted “garage”.

As I came from a past where such wildcards were used, maybe sub-tags are what I’m looking for.

Note: by (wildcard) I’m referring to * or the like.

While it is a long time ago, I didn’t see anyone reply to you.

I think all you were missing was a space after “tag:” thus “tag: Airline”

Will be implemented 1.4

2 Likes

Amazing - I just tested and it works just like I expect. This will make tagging much more viable as an organizational piece.

Thank y’all for your work!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.