ATQQ / sugar-blog

✍️📚我写博客的地方🤪🤪🤪记录随笔与学习笔记,仓库包含:博客内容,博客主题、博客模板、vitepress离线全文搜索插件、VitePress RSS 支持插件;a blog theme use vitepress
https://sugarat.top
MIT License
361 stars 65 forks source link

pagefind插件,如果md中出现<script setup lang="ts">标签将无法索引 #263

Closed XiaofengdiZhu closed 3 months ago

XiaofengdiZhu commented 3 months ago

会出现may not be a valid file, will not be indexed, please contact the author for assistance
去掉lang="ts"即可,但还是希望解决,谢谢
如果只去掉setup,也不会报错~但我的vue组件就显示不出来了

另外,对自定义vue组件的支持不太好,我这好像只能索引到vue组件里最后一个h标签及其之后的内容,没继续深入研究,而vitepress自带搜索能搜到全部内容

最后,希望内容预览能像原版那样带css样式带图片

ATQQ commented 3 months ago

可以先回退的 0.4.3 版本试一试。上周上了 一个feature 可能有些影响

ATQQ commented 3 months ago

预览的那个能力,不一定好做,这个得研究一下 pagefind 本身是否能在理论上支持,之前有反馈过。

XiaofengdiZhu commented 3 months ago

可以先回退的 0.4.3 版本试一试。上周上了 一个feature 可能有些影响

解决一个新报错后(source目录错误),没有更多报错了,但vue组件里的东西变成一点都不索引,文章的其他部分正常

ATQQ commented 3 months ago

可以先回退的 0.4.3 版本试一试。上周上了 一个feature 可能有些影响

解决一个新报错后(source目录错误),没有更多报错了,但vue组件里的东西变成一点都不索引,文章的其他部分正常

可以 看一下你的组件咋写的嘛,你看看编译后那个组件内容是不是在 HTML的 VPContent 里,要SSG能渲染出来,ClientOnly 包裹的组件应该不会出现在HTML里

XiaofengdiZhu commented 3 months ago

我先尝试换回vitepress自带,分析了一下它是如何预览的:加载那个md文件,浏览器里解析并渲染整个h标题下面的内容,将高亮的位置显示在中间
我看了下pagefind文档,它返回的结果有路径和应该被高亮的内容,应该同样能实现 Snipaste_2024-07-08_17-56-23 然后确定它并不能索引vue组件中的内容~是我记错了,它只是能渲染vue组件


确定那个组件的完整结果在 HTML的 VPContent 里有。我做的这个vue组件是为了在宽屏下有更直观的显示效果,SSG的时候渲染的结果是样式更简单的窄屏版,如果出预览功能的话,理论上不需要在从头渲染md,直接加载html会有更好的性能,即可以给预览加个选项:是否从头渲染 晚些我会把我的项目放到github上

XiaofengdiZhu commented 3 months ago

@ATQQ 来了来了 源码:https://github.com/XiaofengdiZhu/GigavoltDoc
预览:https://xiaofengdizhu.github.io/GigavoltDoc/

复现方式: 打开这个页面:https://xiaofengdizhu.github.io/GigavoltDoc/zh/expand/sensors/terrain_scanner.html 能看到五个端口定义,这是我通过Vue组件实现的 Snipaste_2024-07-11_23-35-26

ATQQ commented 3 months ago

Get 周末我看一下

ATQQ commented 3 months ago

看了一下 索引是生成了的

image

功能不好用 是因为 pagefind 对中文的分词这块支持还有点弱

https://pagefind.app/docs/multilingual/#language-support

image

后面是有计划在前端侧引入一个分词的库看看效果

XiaofengdiZhu commented 3 months ago

请再看看我的说明\~ @ATQQ 只能索引到vue组件里最后一个h标签及其之后的内容
后端输入那块就是最后一个h标签之后的,前面的几个端口的内容是一点都搜不到

ATQQ commented 3 months ago

① lang="ts" 的问题已经修复了 ② 检索内容我看了一下应该是检索到了的

image image

搜索无结果,那确实是库本身对中文支持的问题了。

中文的分词我默认已经调整成使用浏览器自带的了 Intl.Segmenter,比原来效果应该会好一点。

③ 目前搜索结果展示策略是,针对一个页面的只展示匹配度最高的最后一条。

所以有下面这个问题。

搜索每个端口都有的使用位宽,搜索结果中,该页的仅有后端输入里面的。

这块我计划暴露一个配置,支持自定义要展示的条数或全部展示。

XiaofengdiZhu commented 3 months ago

谢谢!期待更新!

另外,配置还缺几个本地化字符串:to selectto navigateto closeSearch by

附让顶栏的搜索框更接近vitepress自带搜索框的css:

.content-body > .blog-search > .nav-search-btn-wait {
    border-radius: 8px;
    padding: 0 10px 0 12px;
    background-color: var(--vp-c-bg-alt);
    width: 100%;
    height: 40px;

    &:hover {
        background: var(--vp-c-bg-alt);
    }

    & .search-tip {
        padding-left: 8px;
        padding-right: 16px;
    }

    & .metaKey {
        border: 1px solid var(--vp-c-divider);
        border-radius: 4px;
        padding: 0 6px;
    }
}
ATQQ commented 3 months ago

可以试试 vitepress-plugin-pagefind@0.4.8

除了已知问题修复,还有:

XiaofengdiZhu commented 3 months ago

感谢!越来越完善了!新发现一个小问题,一篇文章内的结果顺序是倒序的,感觉应该反一下
Snipaste_2024-07-20_23-57-35
期待完善的中文分词~

ATQQ commented 3 months ago

ok 顺序这块我调一下

ATQQ commented 3 months ago

最新版本 是 0.4.9 ,顺序这块的问题也已经处理了