有什么办法可以在搜索双链时优先展示某些路径下的内容块呀

如图 1 ,搜索开心会出来很多之前引用的"开心"的块,但我想优先展示指定路径下的块(如图 2),

目前是给目标块加上了别名使得可以优先命中,如果每个目标块都要加一个别名,似乎有点太繁琐了

有没有什么简单点的办法,可以优先展示指定的块呢

image.png

image.png

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26634 引用 • 110885 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10273 引用 • 46683 回帖 • 62 关注

相关帖子

被采纳的回答
  • 把下面的代码放到 js 代码片段中

    把 searchRefBlockSortBy(['你的路径']); 改成你自己的真实路径即可

    searchRefBlockSortBy(['你的路径']); function searchRefBlockSortBy(sortPaths) { const originalFetch = window.fetch; window.fetch = async function (url, init) { // 真正发请求 const response = await originalFetch(url, init); // 只处理目标接口 if (url.toString().toLowerCase().endsWith('/api/search/searchrefblock')) { // 克隆一份 response,用来读 body const cloned = response.clone(); let bodyJson; try { bodyJson = await cloned.json(); } catch (e) { // 如果不是 JSON,直接返回原始 response return response; } // 排序返回结果 const blocks = bodyJson?.data?.blocks; if (Array.isArray(blocks)) { blocks.sort((a, b) => { const hPathA = a.hPath || ''; const hPathB = b.hPath || ''; const isMatchedA = sortPaths.some(prefix => hPathA.startsWith(prefix.replace(/^\//,'')) || hPathA.includes(`/${prefix.replace(/^\//,'')}`) ); const isMatchedB = sortPaths.some(prefix => hPathB.startsWith(prefix.replace(/^\//,'')) || hPathB.includes(`/${prefix.replace(/^\//,'')}`) ); if (isMatchedA && !isMatchedB) return -1; if (!isMatchedA && isMatchedB) return 1; return 0; }); // 把修改后的数据串回去,构造一个新的 Response const newBody = JSON.stringify(bodyJson); const { status, statusText, headers } = response; return new Response(newBody, { status, statusText, headers }); } } // 默认返回原始 response return response; }; }

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 把下面的代码放到 js 代码片段中

    把 searchRefBlockSortBy(['你的路径']); 改成你自己的真实路径即可

    searchRefBlockSortBy(['你的路径']); function searchRefBlockSortBy(sortPaths) { const originalFetch = window.fetch; window.fetch = async function (url, init) { // 真正发请求 const response = await originalFetch(url, init); // 只处理目标接口 if (url.toString().toLowerCase().endsWith('/api/search/searchrefblock')) { // 克隆一份 response,用来读 body const cloned = response.clone(); let bodyJson; try { bodyJson = await cloned.json(); } catch (e) { // 如果不是 JSON,直接返回原始 response return response; } // 排序返回结果 const blocks = bodyJson?.data?.blocks; if (Array.isArray(blocks)) { blocks.sort((a, b) => { const hPathA = a.hPath || ''; const hPathB = b.hPath || ''; const isMatchedA = sortPaths.some(prefix => hPathA.startsWith(prefix.replace(/^\//,'')) || hPathA.includes(`/${prefix.replace(/^\//,'')}`) ); const isMatchedB = sortPaths.some(prefix => hPathB.startsWith(prefix.replace(/^\//,'')) || hPathB.includes(`/${prefix.replace(/^\//,'')}`) ); if (isMatchedA && !isMatchedB) return -1; if (!isMatchedA && isMatchedB) return 1; return 0; }); // 把修改后的数据串回去,构造一个新的 Response const newBody = JSON.stringify(bodyJson); const { status, statusText, headers } = response; return new Response(newBody, { status, statusText, headers }); } } // 默认返回原始 response return response; }; }
    1 回复
  • SyTlr

    谢谢大佬!另外想请教一下,这个路径变量是字符串列表吗,可以用 ',' 分隔多个路径?

    1 回复
  • 是数组,多个路径,可以这样

    searchRefBlockSortBy(['demo1/demox', 'demo1/demo2']);

    2 回复
  • SyTlr

    好的好的,谢谢~

  • SyTlr

    大佬,我有个小疑问,这个 js 片段,支持多级路径吗?

    比如,我的块的路径是 '/文档 A/文档 B/文档 C',我可以在路径变量里填写'/文档 A' 吗?

    比如下面,我直接填写了 [ '/关注的主题' ],似乎搜索排序没有生效

    image.png

    1 回复
  • 支持,你是仅填这一个,还是有其他?如果还有其他,也可能被其他的优先了

    另外,这个是通过 hpath 匹配的,如果你的其他文件夹也有同名路径,也可能匹配到其他的。

    建议,如果其他路径有同名的,建议路径多写点或者用全路径,最好全局唯一。

    1 回复
  • SyTlr 1 评论

    这样子啊。

    我填的变量是:searchRefBlockSortBy(['/🌈新建主题【存放】','/关注的主题']); 我能保证这两个路径是全局唯一的。不过这个搜索结果排在前面的内容块 hpath 没有在这个变量填的路径里。

    另外就是,在 /关注的主题 下还有其他的子路径,比如 /关注的主题/文档A/关注的主题/文档A,我是希望在 /关注的主题 这个 hpath 下的内容块都被优先搜索出来(不管文档深度是多少),所以尝试了只填 hpath 的共同部分,不确定变量格式有没有写正确

    格式没问题,还有一点需要注意,这个代码是在已筛选出来的结果中,把指定的路径排在前面,前提是你搜索关键词必须足够精确,且指定路径下的关键词必须在搜索结果中出现。如果关键词搜索太泛,建议使用精确关键词。
    wilsons
请输入回帖内容 ...

推荐标签 标签

  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 736 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 12 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 6 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    337 引用 • 324 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2389 回帖 • 1 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 448 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 33 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    201 引用 • 120 回帖 • 4 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1340 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 832 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 2 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1432 回帖 • 1 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    377 引用 • 1865 回帖 • 2 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 203 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 541 关注
  • 996
    13 引用 • 200 回帖 • 3 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 142 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 119 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 3 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 714 关注