想写一个搜索本地文档的网站,有什么好的实现方式? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
ggp1ot2

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

  •  2
     
  •   ggp1ot2 Aug 23, 2022 2892 views
    This topic created in 1342 days ago, the information mentioned may be changed or developed.

    应该不是搜索引擎吧。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    如果不愿意用,最简单的前台无所谓写什么,后台文件和标签写入数据库,其实就是个定向搜索,做好数据结构一段儿 sql 解决,功能全面一些的可以挂 postgresql ,讲究的可以写 api ,嫌麻烦的直接 sql
    ggp1ot2
        13
    ggp1ot2  
    OP
       Aug 24, 2022 via iPhone
    @Maxwe11 感谢,写个 api 这个思路确实没想到过
    AlisaDestiny
        14
    AlisaDestiny  
       Aug 24, 2022 via Android
    好巧,楼主和我需求一样,我也是用 md 写笔记,太多了搜索就成了难题。我目前准备用 meilisearch 做搜索引擎,选它主要是轻且支持 typo-tolerance ,用 rust 写 web 服务。
    colorday
        15
    colorday  
       Aug 24, 2022
    简单点的方案,买个 NAS 吧,比如:QNAP 威联通,内置的检索工具很强大,图片里面的文字都会建立索引,你想要的功能基本都有。存储文件就自动建立索引,很方便,零开发,还安全。
    ggp1ot2
        16
    ggp1ot2  
    OP
       Aug 24, 2022
    @AlisaDestiny #14 你这个是全文搜索吧。我也考虑过,但是全文搜索,总是会搜到一些并不想要的结果。。
    ggp1ot2
        17
    ggp1ot2  
    OP
       Aug 24, 2022
    @colorday #15 擦 这个思路倒是可以,完全没有想过,看起来开发成本最低了
    hatsuyuki
        18
    hatsuyuki  
       Aug 24, 2022
    huarong
        19
    huarong  
       Aug 24, 2022
    可以把 md 内容导入到 es 中,通过 py 的 es api 做搜索
    huarong
        20
    huarong  
       Aug 24, 2022
    mysql 也支持 full text search ,数据量不大可以使用
    ggp1ot2
        21
    ggp1ot2  
    OP
       Aug 24, 2022
    @huarong #19 感谢提供思路,本质上还是全文搜索吧
    dobelee
        22
    dobelee  
       Aug 24, 2022
    1.本地部署 ES ,并安装中文分词器;
    2.MD 全量索引到 ES ;
    3.编写 HTTP 服务器,转发到 ES ;
    4.编写前端页面;
    5.编写脚本侦测 MD 文件变动时索引到 ES ;
    6.根据实际业务汇总并增加自定义词库到分词器。
    About     Help     Advertise     Blog     API     FAQ     Solana     906 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 22:13 PVG 06:13 LAX 15:13 JFK 18:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86