yan42685 / obsidian-clever-search

Helping you quickly locate the notes in your mind in the easiest way, without the need for complex search syntax to find relevant content.
GNU General Public License v3.0
98 stars 0 forks source link

[Feture Request] 是否可以支持 OB 的搜索语法? #14

Closed Moyf closed 8 hours ago

Moyf commented 7 months ago

Please describe your idea concisely

比如现在搜索 pr,会把 promise 之类的单词也搜索进去; 能不能用 "pr" 来设定 全字匹配,在这个情况下只检索 pr 这个词,而忽略其他的 pr... 开头的词?

另外还有像是 line() 之类的限定词,只搜索出现在同一行/同一段内的情况,能更好地控制搜索范围

Screenshots

image

yan42685 commented 7 months ago

精确匹配词语可以实现,后面的line语法似乎并非必要,出现多个不同匹配词的行会优先排在前面。

另外,近期空闲时间很少,只能以后再实现了

Moyf commented 1 day ago

精确匹配词语可以实现,后面的line语法似乎并非必要,出现多个不同匹配词的行会优先排在前面。

另外,近期空闲时间很少,只能以后再实现了

(希望能支持一下精确匹配词语,恰好最近又碰到这个需求了 > <

yan42685 commented 1 day ago

我研究了下,实现精确匹配困难重重且效果不好。本插件所使用的BM25算法库Minisearch的作者未支持精确匹配功能: https://github.com/lucaong/minisearch/issues/216 image 所以只能在模糊匹配后,读取所有候选文件并进行全文匹配、过滤掉不包含精确匹配词的文件。如果候选文件大于20个,延迟就很明显了;对于大的库可能有几百上千个候选项,那得等十几秒出结果...此外改起来也有点麻烦,会产生不少相似代码。

对于你的场景来说,“输入/np 本次搜索取消前缀匹配”这样的功能够用吗?比如这样: image

未取消前缀匹配时搜索pr的结果确实不够好: image

Moyf commented 20 hours ago

我研究了下,实现精确匹配困难重重且效果不好。本插件所使用的BM25算法库Minisearch的作者未支持精确匹配功能…… 啊,原来是这样……那支持起来确实好折腾了。

我觉得你说的这个特性(取消前缀匹配)也能很大程度上解决我所遇到的问题!像是 PR/Promise 还有 Wind/Windows 之类的情况。

如果做的话,是否可以支持自定义 /np 关键字 + 支持在设置里直接配置全局的「是否前缀匹配」开关?

(话说顺便问一下,大小写匹配麻烦吗?)


以及,完全不着急!现在已经是一个非常好用的插件了,等您有时间了再考虑就好!

yan42685 commented 14 hours ago

今天有点空,都实现了,看看有什么问题吗

受 Minisearch API 限制,区分大小写的切换与重建索引挂钩,所以没写调整它的指令

Moyf commented 8 hours ago

嗯,我这边更新试了一下:

  1. /np PR 取消前缀匹配:✅
  2. 设置里的前缀匹配开关:✅
  3. 设置里的大小写匹配:✅

这几个都没问题!

(然后自定义 /np 关键字的设置没找到——不过也不关键,这个输入一下还挺快的;测试的时候发现是只能放在检索词的最前面对吗?比如只能用 /np PR,不能用 PR /np 🤔

yan42685 commented 8 hours ago

目前是只能放在检索内容前面,以后有空了改成前面或后面吧,筛选式命令很符合直觉;没有实现“自定义命令的名字“;在 README 还有其他的命令介绍