业余开发了一个技术搜索引擎,请小伙伴们提提意见。

2019-06-16 21:48:16 +08:00
 nyfok

如题,最近业余开发了一个搜索引擎,面向程序员领域,收录了国内技术网站和国外 github,stackoverflow 等网站。解决国内不能访问 google 的痛点,以及某些搜索广告太多的问题。

纯粹手痒,做着玩玩看,目前蜘蛛的索引面还在不断增加中。在开发过程中优化了分词和 ranking 的算法,如果谁有好的 page ranking 算法建议,欢迎跟帖。

欢迎大伙多提改进意见(拍砖请绕行),也请帮忙判断一下,这个产品有没有留着的必要,如果没有保留必要,我玩一阵子就准备把网站关了。

谢谢大伙。ps:goobe.cn

14413 次点击
所在节点    分享创造
115 条回复
nyfok
2019-07-10 11:20:28 +08:00
你好,实现原理如下:
1、自己使用微软的 webbrowser 封装一个浏览器,并自定义鼠标右键事件。
2、当点击鼠标右键的时候,可以将右键事件对应的网页节点元素取出,包括节点的完整 html,以及节点的前一节点、后一节点、及父节点信息。
3、基于第 2 步骤获得的节点信息,再 htmlagility 的 document 寻找到对应节点,并获得 xpath。为什么要这么做,因为以后抓取的时候都是用 htmlagility 来解析 html document 和 xpath,这样性能才有保障。如果都 webbrowser 来加载页面,再解析,性能会很低。另外,webbrowser 的 html 都是经过处理过的 html,所以 xpath 和源网页可能会有差异,所以要将 webbrowser 的 node 信息转换为 htmlagility 的 node 信息。
4、日后抓取中,使用第 3 步的 xpath 信息即可取出对应的节点。
备注:
1、xpath 解析和寻找节点,不一定适用 htmlagility,因为这个对 document 的 xml 结构化要求比较高,可以自己尝试动手写一个。
2、建议对 xpath 进行一些扩展,包含上如 node id,node classname 等一些信息,这样会提高节点定位准确性。诸如:/html/body/div[id="MainContent" class="Main"]/span[id="PostTime"]
3、建议对 xpath 进行一些扩展,包含节点序号。譬如某个 span 节点,是父节点下第 2 个节点,可以书写如下:/html/body/div[id="MainContent" class="Main"]/span[2].
4、xpath 如果只用 full path,即从根节点 html 到节点的完整路径,有时候不能够很好的对抗对方网页的改版。所以可以将代码优化,支持相对路径的 xpath,而不是完整 xpath。譬如://div[id="MainContent" class="Main"]/span[id="PostTime"]

这个工具现在还不能开源,因为该工具也被应用到了别的商业项目中,要拆分出来还得需要花比较多的时间,暂时还没时间来弄这件事情。以上的信息,你可以借鉴来开发。
nyfok
2019-07-10 11:21:02 +08:00
@qw30716 多谢朋友提醒,可否告知具体搜索关键字?
linxiaojialin
2019-07-11 09:29:07 +08:00
赞一个,多谢楼主
mqqjqr5566
2019-07-11 14:02:48 +08:00
多谢,楼主厉害,已关注..
nyfok
2019-07-12 13:02:51 +08:00
@linxiaojialin 感谢支持,祝好!
nyfok
2019-07-12 13:03:13 +08:00
@mqqjqr5566 感谢支持,祝好!
Hopetree
2019-07-13 17:24:38 +08:00
首先,我觉得敢于写搜索引擎的都是大佬,希望大佬坚持下去吧,毕竟搜索引擎这种项目要维护感觉需要的资源挺大的。
个人觉得博客园的文章比较靠谱,我一般搜索都是点击博客园的,CSDN 现在的确有点恶心
nyfok
2019-07-15 00:31:19 +08:00
@Hopetree 感谢朋友支持!博客园现在收录的已经差不多了,这几天在切割服务器,切割完成后就可以看到了。另外,接下来准备也收录些简书、知乎,貌似那些站点也有一些。
祝好~!
brucewuio
2019-07-15 11:18:21 +08:00
牛逼啊
wmhx
2019-07-15 17:15:53 +08:00
牛逼 .
nyfok
2019-07-15 23:32:22 +08:00
感谢 brucewuio, wmhx 支持!晚上下班回家看到你们的表扬,那个高兴啊,哈哈,谢谢!
ps,最近用户涨了不少,全是大伙的功劳,谢谢大家~
yinqi025
2019-07-16 09:07:08 +08:00
这个用起来确实还不错,点个赞~~~
ziyue002
2019-07-16 09:29:18 +08:00
响应很快的,服务器啥配置~
nyfok
2019-07-17 09:19:56 +08:00
@yinqi025 感谢朋友支持,我继续努力!
nyfok
2019-07-17 09:21:55 +08:00
@ziyue002 阿里云,限制形实例( cpu 最高 15%),4 个 vcpu,4g 内存,200g ssd。cpu 太弱,要是 cpu 没有限制的那种,性能会好很多,可惜价格又多出不少,暂时还没舍得。
myforgame
2019-07-17 13:18:03 +08:00
还缺掘金和简书
nyfok
2019-07-17 15:46:13 +08:00
@myforgame 马上就弄
orangeChu
2019-07-17 21:38:44 +08:00
赞楼主!用了一下,第一反应就是快!小白想请教些问题。
对数据的检索是怎么做到响应这么快的?如果是已有的数据能够按照这个检索方式来实现快速搜索吗?
nyfok
2019-07-17 21:49:10 +08:00
感谢支持!要做到快,主要有以下几点要注意:
1、lucene 索引写完成后,一定要 optimize 一下。
2、lucene 索引不要边写,边查,碎片率高,检索性能会下降。定期将更新的索引 optimize 后,复制到网站用来搜索的 lucene 索引目录下,定期更新索引。
3、最好将 lucene 索引放在 ssd 上,提高查询速度。
4、查询速度慢的时候,关注服务器 cpu,如果 cpu 高,得提高 cpu 核数或者主频。
5、lucene 查询的原理是,先分词,再对各个分词的结果进行交集运算,所以当查询里面有多个常用词(譬如:的 | 你 | 我 | 我们)时,通常会涉及大的 set 集合并,比较影响性能。所以可以根据情况,在 lucene 查询前,自己先分词一下,滤掉一些不必要查询的关键词。具体可以参照停用词逻辑,只不过这儿的停用词不是用来在索引的时候,而是在搜索关键词过滤的时候。
6、lucene 查询适当缩小 maxdoc,目前我写的是 10010,以前设定 100000,有点慢。
7、关注服务器内存,lucene 索引可以用内存做缓存,越大的内存能够确保检索速度。
8、实时对网站和 lucene 预热,可以自己写一个循环 http get url 的程序,枚举各个搜索关键字搜索自己的网站来预热。

如果你的数据量不大,建议用 sql server 的全文索引,比较简单。如果数据量超过 100 万,那就 lucene 或者 elasticsearch 吧。
orangeChu
2019-07-17 21:54:19 +08:00
@nyfok 我是把用户数据(类似手机上的通讯录数据)都检索出数组放在前台的变量上。搜索时,通过检索变量,速度大概要 1s 左右,数据量就几千个用户数据,尤其加了渲染动画后,明显感觉到慢,没有毫秒出搜索结果的感觉。
我是不是也能在这种简单的业务上,使用 lucene 来达到快速搜索?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/574523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX