如何在插件中调用核心搜索插件的API?

遇到的问题

我在开发一个ob插件,有一个需求:需要找到包含某个资源引用的所有md文档列表,并对文档进行一些处理。如果从vault读取所有文档,再逐个文档内容匹配,效率太差了。因为ob有一个global-search核心插件,我想能否调用该插件进行搜索,提高效率。

预期的效果

我希望能够调用global-search核心插件的API来进行全文搜索,得到匹配的md文档列表。

已尝试的解决方案

1.从OB开发文档里面,没有找到全文搜索API。

2.用这行代码,报错:
const searchResults = await this.app.internalPlugins.getPluginById(‘global-search’).instance.search(term);
instance里面找不到search方法。

从开发者工具里看到有两个与search有关的函数,但看代码都不是能直接使用的全文搜索API,openGlobalSearch看起来是发起一个全文搜索,但是没有看到返回值或者接收返回值的回调函数。

想问下大家,有办法调用全文搜索API吗?

我没理解你为什么要用搜索。某个资源引用的md文档是什么意思,直接用链接来找不行吗。

是这样的:我想找到某个资源的反链,比如一个图片在10个md文档里引用了,在图片重命名时,我想同步修改那10个文档,所以我想使用全文搜索去找它的反链文档。

可以在metadataCache里面找:

遍历所有文件的cache,然后从embeds里面找这个图片的路径。 应该比整个库中全文搜索要快

1 个赞

我翻了一下代码,obsidian应该没有把全局搜索写成一个 API。全局搜索的实现方式是遍历每个文件进行匹配,匹配成功后直接执行添加dom的回调函数。

1 个赞

大佬厉害 :+1:,学习了