V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ggp1ot2
V2EX  ›  程序员

想写一个搜索本地文档的网站,有什么好的实现方式?

  •  2
     
  •   ggp1ot2 · 2022-08-23 19:37:40 +08:00 · 2154 次点击
    这是一个创建于 824 天前的主题,其中的信息可能已经有所发展或是发生改变。

    应该不是搜索引擎吧。

    就是有一堆 markdown 写的文档,每个文档都有一个或者多个标签。

    现在需要写一个网页。网页打开就是一个空白搜索框。

    搜索框输入一个标签,就自动将含有该标签的文档排列展示出来。

    =================

    实现这样的需求,大概用什么技术 /框架

    如果是基于 Python 的就更好了。

    我不清楚,类似这样的需求,应该是检索哪些关键词才能找到相关文档学习,网上一搜都是基于搜索引擎的

    ================

    我目前想的,就是手动去定义,输入哪个标签出现哪些文章,就是自己固定的去写好(感觉有点笨,工作量也会大)

    所以有没有一个简单一点的方式,这样后续新增新的文档,也只需要上传文档,标记好这个文档的标签就好了

    有没有大神给点思路,或者能实现类似需求的文章的关键词,我自己学也行[哭]

    22 条回复    2022-08-24 23:41:40 +08:00
    Building
        1
    Building  
       2022-08-23 19:47:26 +08:00 via iPhone
    为每个 markdown 生成一个网站,部署在自己的服务器上让谷歌索引,然后直接谷歌站内搜索
    ggp1ot2
        2
    ggp1ot2  
    OP
       2022-08-23 19:48:41 +08:00
    @Building #1 这是一个思路,但是如果是给公司内部用,上不了谷歌咋办。。
    renmu
        3
    renmu  
       2022-08-23 19:48:54 +08:00 via Android
    用 ob 就行了,搜索功能都帮你做完了
    ggp1ot2
        4
    ggp1ot2  
    OP
       2022-08-23 19:49:35 +08:00
    @Building #1 还有的问题就是,不希望根据文章名或者内容索引,就是每个文章挂多个标签,只能通过标签搜到文章
    ggp1ot2
        5
    ggp1ot2  
    OP
       2022-08-23 19:50:05 +08:00
    @renmu #3 大佬,我能弱弱的问一句,ob 是啥吗
    ggp1ot2
        6
    ggp1ot2  
    OP
       2022-08-23 19:51:35 +08:00
    另外补充一句,最终交付,一定要是一个自己写出来的网站,有源码那种
    TMaize
        7
    TMaize  
       2022-08-23 19:57:46 +08:00
    可以在
    TMaize
        8
    TMaize  
       2022-08-23 19:59:48 +08:00
    可以规定个写标签的格式比如 Front Matter 。在写个服务监听变化的文件,生成索引

    https://www.vuepress.cn/guide/frontmatter.html
    superychen
        9
    superychen  
       2022-08-23 20:26:03 +08:00
    flask 简单写个 API 就行了,前端就一个简单的搜索展示页面,调用下自己写的 API ,API 内部逻辑就是根据前端请求过来的标签关键字去本地文件遍历匹配内容标签,最终返回前端展示
    如果文件很多,每次遍历费劲,python 还提供了文件监控的库,如 pyinotify ,watchdog 等,增加下监听每次变动更新下索引,查找从索引即可
    ggp1ot2
        10
    ggp1ot2  
    OP
       2022-08-23 20:48:09 +08:00 via iPhone
    @superychen 感谢,这个思路目测是可行的。

    即前端还是 html+css+js
    后端是 flask
    用 Python 去搜索
    ggp1ot2
        11
    ggp1ot2  
    OP
       2022-08-23 22:10:51 +08:00
    @TMaize #8 感谢,我去看看去
    Maxwe11
        12
    Maxwe11  
       2022-08-24 00:22:21 +08:00
    最简单最省心当然还是直接部个 es 就完了,不过就像 lz 说的,这算是搜索引擎的方案,可是确实省事儿;

    如果不愿意用,最简单的前台无所谓写什么,后台文件和标签写入数据库,其实就是个定向搜索,做好数据结构一段儿 sql 解决,功能全面一些的可以挂 postgresql ,讲究的可以写 api ,嫌麻烦的直接 sql
    ggp1ot2
        13
    ggp1ot2  
    OP
       2022-08-24 07:18:14 +08:00 via iPhone
    @Maxwe11 感谢,写个 api 这个思路确实没想到过
    AlisaDestiny
        14
    AlisaDestiny  
       2022-08-24 10:58:18 +08:00 via Android
    好巧,楼主和我需求一样,我也是用 md 写笔记,太多了搜索就成了难题。我目前准备用 meilisearch 做搜索引擎,选它主要是轻且支持 typo-tolerance ,用 rust 写 web 服务。
    colorday
        15
    colorday  
       2022-08-24 11:21:31 +08:00
    简单点的方案,买个 NAS 吧,比如:QNAP 威联通,内置的检索工具很强大,图片里面的文字都会建立索引,你想要的功能基本都有。存储文件就自动建立索引,很方便,零开发,还安全。😄
    ggp1ot2
        16
    ggp1ot2  
    OP
       2022-08-24 11:24:45 +08:00
    @AlisaDestiny #14 你这个是全文搜索吧。我也考虑过,但是全文搜索,总是会搜到一些并不想要的结果。。
    ggp1ot2
        17
    ggp1ot2  
    OP
       2022-08-24 11:25:33 +08:00
    @colorday #15 擦 这个思路倒是可以,完全没有想过,看起来开发成本最低了
    hatsuyuki
        18
    hatsuyuki  
       2022-08-24 14:43:52 +08:00
    huarong
        19
    huarong  
       2022-08-24 19:23:32 +08:00
    可以把 md 内容导入到 es 中,通过 py 的 es api 做搜索
    huarong
        20
    huarong  
       2022-08-24 19:54:30 +08:00
    mysql 也支持 full text search ,数据量不大可以使用
    ggp1ot2
        21
    ggp1ot2  
    OP
       2022-08-24 20:12:44 +08:00
    @huarong #19 感谢提供思路,本质上还是全文搜索吧
    dobelee
        22
    dobelee  
       2022-08-24 23:41:40 +08:00
    1.本地部署 ES ,并安装中文分词器;
    2.MD 全量索引到 ES ;
    3.编写 HTTP 服务器,转发到 ES ;
    4.编写前端页面;
    5.编写脚本侦测 MD 文件变动时索引到 ES ;
    6.根据实际业务汇总并增加自定义词库到分词器。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:10 · PVG 15:10 · LAX 23:10 · JFK 02:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.