|
| 1 | +--- |
| 2 | +title: vuepress 搜索插件 |
| 3 | +createTime: 2025/11/16 15:22:54 |
| 4 | +permalink: /develop_notes/jwqi77f7/ |
| 5 | +--- |
| 6 | + |
| 7 | +汐洛使用 [slimsearch](https://ecosystem.vuejs.press/zh/plugins/search/slimsearch.html) 替代了 plume 主题的默认本地搜索,不同的是我们使用 [@node-rs/jieba](https://www.npmjs.com/package/@node-rs/jieba) 而不是slimsearch文档中的 [nodejs-jieba](https://github.com/Mister-Hope/nodejs-jieba) 进行分词。 |
| 8 | + |
| 9 | +```ts title=".vuepress/config.ts" |
| 10 | +import { Jieba } from "@node-rs/jieba"; // [!code ++] |
| 11 | +import { dict } from "@node-rs/jieba/dict.js"; // [!code ++] |
| 12 | + |
| 13 | +// Initialize Jieba with the default dictionary |
| 14 | +const jieba = Jieba.withDict(dict); // [!code ++] |
| 15 | + |
| 16 | +export default defineUserConfig({ |
| 17 | + /* 本地搜索, 默认启用 */ |
| 18 | + search: false, // [!code highlight] 禁用 plume 自带的搜索插件 |
| 19 | + |
| 20 | + plugins: [ |
| 21 | + // 分词构建后也生效,docs:preview 未生效可能是缓存问题 |
| 22 | + slimsearchPlugin({ // [!code ++] |
| 23 | + indexContent: true, // [!code ++] |
| 24 | + suggestion: true, // [!code ++] |
| 25 | + indexOptions: { // [!code ++] |
| 26 | + tokenize: (text, fieldName) => { // [!code ++] |
| 27 | + return fieldName === "id" ? [text] : jieba.cut(text, true); // [!code ++] |
| 28 | + }, // [!code ++] |
| 29 | + }, // [!code ++] |
| 30 | + customFields: [ // [!code ++] |
| 31 | + { // [!code ++] |
| 32 | + name: "author", // [!code ++] |
| 33 | + //@ts-ignore // [!code ++] |
| 34 | + getter: (page) => page.frontmatter.author, // [!code ++] |
| 35 | + formatter: "作者:$content", // [!code ++] |
| 36 | + }, // [!code ++] |
| 37 | + ], // [!code ++] |
| 38 | + }), // [!code ++] |
| 39 | + ] |
| 40 | + |
| 41 | +}) |
| 42 | +``` |
| 43 | + |
| 44 | +slimsearch 搜索结果不显示面包屑层级,这是个遗憾。 |
0 commit comments