V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
techv
V2EX  ›  分享创造

做了一个代码搜索引擎: dig.codes

  •  
  •   techv · 2022-04-24 08:31:53 +08:00 · 5356 次点击
    这是一个创建于 944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一个全栈开发者,经常要在多种语言之间挑战,然而最熟悉的只有一种,其它的往往是随用随学,对搜索引擎的依赖很大,而搜索引擎的结果需要再点进去查找,比较繁琐了那么一点点。

    dig.codes 希望减少那一点点繁琐,在结果页主要显示代码,通过看这一页的结果快速解决编程中的问题,比如“js 数组 方法”。如果需要深入了解这个问题,再点击原始链接查看详情。

    实际上,“减少那一点点繁琐”的愿望并不好实现。dig.codes 的数据源是在线教程、文档、博客,挖掘其中的代码匹配用户查询并把最符合的代码呈现给用户,这个匹配过程其实相当难。用户输入是带有语义的自然语言,目前搜索引擎的算法主要是字符串匹配,这中间有个巨大的鸿沟——语义。这就导致你很容易发现 bad case ,当然也有很多 good case 。也尝试了语义搜索的方法,但是效果比字符串匹配差很多。这个愿望的圆满还任重道远。

    下一步,搜索算法,减少答非所问的情况。同时也在考虑是否要实现 github 代码搜索。目前的搜索,主要是搜索文档中的代码,要搜索 GitHub 的话就是从工程代码中搜,即纯代码搜索。由于 GitHub 已经提供的代码搜索,dig.codes 再提供类似的功能意义何在?近期一直在考虑这个问题。如果您有什么建议,欢迎回复提出,十分感谢。

    请大家试用 https://dig.codes/ , 提出您的宝贵意见和建议,以及各种讨论,谢谢,谢谢。

    第 1 条附言  ·  2022-04-30 09:30:10 +08:00

    谢谢大家的反馈。

    根据反馈,dig.codes (挖码)作为一个“代码知识库”,提供“代码搜索服务”,这种搜索是基于自然语言的,而不是只在工程代码中匹配。

    因此,“代码知识库”的建立很重要,除了机器挖掘之外,UGC也是非常重要的途径。下一步,挖码将推出 [代码知识管理] ,方便用户记录编码中产生的有价值的“代码知识”。

    如何激励用户产生代码知识是一个非常非常重要的问题,如果大家有何意见请回复讨论。初步想法是,产生一条知识就会累积积分,用户点赞也有积分,而积分有何用呢?值得深入思考。

    帖子发了一周,得到了下面的访问量曲线: 访问量曲线

    39 条回复    2023-05-30 08:18:56 +08:00
    sciel
        1
    sciel  
       2022-04-24 08:58:46 +08:00 via iPhone
    不错呀,虽然搜索 文字转语音 没有找到想要的结果
    不过还是收藏,下次遇到问题时试试哈
    另外 移动端下输入框可以加长一点( ´▽`)
    gogogo1203
        2
    gogogo1203  
       2022-04-24 09:02:52 +08:00
    1. dark mode 可以做一个. 大家用的频率应该很高, 我用自动 dark mode 的插件,页面看得有点怪。
    2. 搜索的结果还是有点差强人意, 尤其是竞品越来越强,copilot 是一种没有办法逾越的大山。我也是全栈,golang- js-css-docker-sql 跳来跳去的,原来仰赖 Notion 自己做知识库. 现在 copilot 在我还没有想好下一步写啥,它就能给出答案。
    3. 我觉得可以缩小范围,最初只做一个语言或者一个框架的知识库。这样好完善内容建设,也好吸引用户。我觉得你把一个 react 各种 hooks 做好,就会有不少人用了
    4. 加入更多的用户自己打标签? ucg ?
    techv
        3
    techv  
    OP
       2022-04-24 09:24:19 +08:00
    @gogogo1203 哇喔,太详细的回复!
    1. dark mode 确实是用的很多, 有空试试。
    2. 跟 copilot 还是无法攀比的,这个工具最初是向快速查询基础用法,比如“js 遍历数组”对于偶尔用 js 的人来说,需要看一个 code 例子就可以马上学会,当然搜索结果有待大大提高。
    3. 这是个很好的建议,如果设计好一种知识库插件机制,每个语言是一个知识库。知识库:1. 有特定的数据结构; 2. 可以从文档自动生成该结构知识库; 3. 众包知识库。
    4. ucg 是个好方向。用户打标签外,还可以用户写代码;有人出题,有人做题。如何激励用户产生内容需要好好想想。
    techv
        4
    techv  
    OP
       2022-04-24 09:32:26 +08:00
    @sciel 你的这个问题比较高级了些,它目前的智力比较适合语言基础之类的问题。
    确实忽略了移动端的输入框,需要优化。
    njutree
        5
    njutree  
       2022-04-24 09:38:38 +08:00
    感觉结果需要优化, 现在的结果感觉还不如 google
    gogogo1203
        6
    gogogo1203  
       2022-04-24 09:40:24 +08:00
    我建议还是要把定位做清晰一点,把 target customer 再做小一点,大而全的结果是推广难,内容乱。

    你看你是要定位成“完全没有用过 arr.map 的”用户, 还是“知道 arr.map, 但是一段时间不用,忘记了”的用户。 可能 arr.map 不是一个很好的例子,arr.reduce 估计很多人都用过, 但是一段时间不用就忘了。

    我个人建议前期做透做精一个点. 或者做成个人知识库的管理, 也可以共享知识库. 大家都是全栈, 什么都懂点,什么都不精.如果一个产品也跟我一样,那可不太行.
    tobeyoung
        7
    tobeyoung  
       2022-04-24 10:06:12 +08:00
    LeeReamond
        8
    LeeReamond  
       2022-04-24 10:09:32 +08:00
    支持 lz 探索的精神,但是我试着上去搜了几个关键字得到的结果都不是很好。。
    mahone3297
        9
    mahone3297  
       2022-04-24 10:14:48 +08:00
    感觉要被 copilot 打败。使用起来 copilot 效率会更高
    fgd
        10
    fgd  
       2022-04-24 10:24:03 +08:00
    不错,感觉我能用到。
    MaxSoloware
        11
    MaxSoloware  
       2022-04-24 10:26:18 +08:00
    想法很不错哎,但是我随便试了一下比如 swift import musickit 出来的都是 JS 的结果。

    在实现上加一些规则是否可以让结果更精准命中一些?比如 github 的 language:这种功能呢?
    fuis
        12
    fuis  
       2022-04-24 11:27:44 +08:00   ❤️ 1
    xiadd
        13
    xiadd  
       2022-04-24 11:32:02 +08:00
    huntagain2008
        14
    huntagain2008  
       2022-04-24 12:49:31 +08:00
    牛逼,开始我以为是 searchcode 一样的光搜代码片段的东西。结果搜到了我想知道的用法,各种教学。比如
    ``` shell
    awk 'max<$5 || NR==1{ max=$5; data=$2 } END{ print data }'
    ```
    我是小白,用 awk 查找某一列的最大值,这一段我就搞不清楚 NR==1 是干嘛的,结果用 awk ' max < || NR == 1 用你的搜索引擎一搜就搜到了。有点像别人现场教学的感觉。
    techv
        15
    techv  
    OP
       2022-04-24 13:33:21 +08:00
    @gogogo1203 做精与做全并不矛盾,做精可能需要更多的人力投入,现在正在探索如何用机器做知识的抽取,这个做好了可以解决很多问题,可以从一点出发做精做透,探索知识抽取的路径。
    techv
        16
    techv  
    OP
       2022-04-24 13:34:54 +08:00
    @njutree 现在还不能跟 Google 比,它的收录面很广
    gogogo1203
        17
    gogogo1203  
       2022-04-24 13:35:23 +08:00
    @techv 我觉得中文和英文同时做自然语言得学习实在太难了。还是取舍和定位吧。
    techv
        18
    techv  
    OP
       2022-04-24 13:37:15 +08:00
    @tobeyoung
    @fuis
    @xiadd
    这 3 个是纯粹的代码片段搜索,也就是我提到的下一步可能要做的。现在的 dig.codes 跟他们不同,可以理解为类似搜索引擎的图片搜索,输入一段文字描述得到一段段代码。
    cweijan
        19
    cweijan  
       2022-04-24 13:40:10 +08:00
    试了几下, 没搜到想要的
    techv
        20
    techv  
    OP
       2022-04-24 13:41:34 +08:00
    @mahone3297 与 copilot 还是不一样,它是帮助你补充代码,digcodes 是帮你补充代码知识。
    初试 copilot 确实被它惊艳到了,我自定义的数据结构它都能“理解”而补充了正确的代码,几次之后就相信了它,然而它对复杂的数据结构有时候不准确,导致 debug 好久才发现是它代码的问题。
    techv
        21
    techv  
    OP
       2022-04-24 13:42:34 +08:00
    @fengyiqicoder language: 过滤在计划中,应该能提高准确率,多谢。
    techv
        22
    techv  
    OP
       2022-04-24 13:43:47 +08:00
    @LeeReamond 谢谢鼓励,它在不断进化,请多多使用,希望它有一天能成为你的助手。
    techv
        23
    techv  
    OP
       2022-04-24 13:45:09 +08:00
    @huntagain2008 恭喜您,发现了它的真正目的,希望这个特点成为它的价值。
    techv
        24
    techv  
    OP
       2022-04-24 13:45:58 +08:00
    @fgd 谢谢,希望能帮到您。
    techv
        25
    techv  
    OP
       2022-04-24 14:00:23 +08:00
    @gogogo1203 确实很难,我再好好考虑考虑取舍和定位的问题,谢谢您的建议。
    zagfai
        26
    zagfai  
       2022-04-24 14:05:39 +08:00
    "python redis asyncio" 没有得到想要答案
    Echoldman
        27
    Echoldman  
       2022-04-24 14:45:47 +08:00
    用了一下,感觉很有意思,一定程度上能给到我想要的东西。
    好奇的问下,这是你的个人在做的项目吗?
    haobogu
        28
    haobogu  
       2022-04-24 17:46:24 +08:00
    如果是 Java 的话,可以试一下 IDEA 的插件 Alibaba Clouding Coding Assistant ,里面也有类似的代码搜索功能 https://alibaba-cloud-toolkit.github.io/cosy/#/zh-cn/guide/how-to-use-codesearch
    techv
        29
    techv  
    OP
       2022-04-24 18:05:15 +08:00
    @zagfai 现在有了。知识库还需继续扩充。
    techv
        30
    techv  
    OP
       2022-04-24 18:06:45 +08:00
    @Echoldman 如有想要的功能尽管提出来哦。是的,个人项目。
    techv
        31
    techv  
    OP
       2022-04-24 18:07:15 +08:00
    @haobogu 好的,去学习一下
    xman99
        32
    xman99  
       2022-04-24 18:32:50 +08:00
    挺有意思的,哈哈
    LemonK
        33
    LemonK  
       2022-04-24 19:16:55 +08:00
    优秀,关注了。曾经设想过类似的 UGC+知识图谱,OP 用搜索+机器抽取效果也很不错。
    我个人还是赞同#2 先按语言一个个做精的想法,如果某个语言结果不全或者质量不高,对这个语言的用户来说就是基本不可用,留着也意义不大。
    techv
        34
    techv  
    OP
       2022-04-25 07:53:08 +08:00
    @LemonK 多谢您和#2 的建议,已经在思考如何从单点做精。
    zagfai
        35
    zagfai  
       2022-04-25 14:11:12 +08:00
    @techv 所以这个扩充是手动的嘛?还是?。。。
    techv
        36
    techv  
    OP
       2022-04-25 17:16:55 +08:00
    @zagfai 手动添加数据源
    huntagain2008
        37
    huntagain2008  
       2022-05-23 12:31:43 +08:00 via iPhone
    printf %b
    点搜索就
    500 — Internal Server Error

    The server encountered an internal error and cannot complete your request.

    iphoneXs safari
    techv
        38
    techv  
    OP
       2022-05-27 19:31:01 +08:00
    @huntagain2008 已修复,非常感谢您的反馈。
    bigtang
        39
    bigtang  
       2023-05-30 08:18:56 +08:00
    dig.codes 域名正在出售,网站是关闭了?问了一下 gpt, 列出几个吧:

    SearchCode.com:SearchCode 从 Github 、BitBucket 、CodePlex 、SourceForge 、Fedora 等代码仓库里筛选了近 160 亿行开源代码;

    tanglib.com: 小唐代码搜索,可以搜索 github star 数量超过 100 的项目中的代码,超过 1.15 亿个代码文件,可以搜索 openharmony 鸿蒙,Android 13 ,chromium 源代码等项目源码,小唐代码搜索是字符级搜索引擎,这意味着你可以搜索任意代码片段(包括符号);

    grep.app:可以搜索超过 50 万个 Git 仓库中的代码,支持正则表达式搜索,但好像是不能组合搜索;

    github.com : github 自己的代码搜索,GitHub 的代码搜索功能可以帮助开发者快速找到自己需要的代码,支持关键字、语言、文件名、文件路径、代码片段等多种搜索方式,可以根据代码的贡献者、更新时间、星级等指标进行排序。GitHub 的代码搜索引擎可以搜索 GitHub 上的所有公开仓库,也可以搜索自己的仓库和组织内的仓库,很强大但是网络访问不好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:34 · PVG 04:34 · LAX 12:34 · JFK 15:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.