如题,最近业余开发了一个搜索引擎,面向程序员领域,收录了国内技术网站和国外 github,stackoverflow 等网站。解决国内不能访问 google 的痛点,以及某些搜索广告太多的问题。
纯粹手痒,做着玩玩看,目前蜘蛛的索引面还在不断增加中。在开发过程中优化了分词和 ranking 的算法,如果谁有好的 page ranking 算法建议,欢迎跟帖。
欢迎大伙多提改进意见(拍砖请绕行),也请帮忙判断一下,这个产品有没有留着的必要,如果没有保留必要,我玩一阵子就准备把网站关了。
谢谢大伙。ps:goobe.cn
101
orangeChu 2019-07-17 22:18:26 +08:00
忘说了我的技术栈是 nodejs,有相关快速检索的方法吗?望不吝赐教,先谢过~
|
102
orangeChu 2019-07-17 22:19:26 +08:00
忘说了,我的技术栈是 nodejs,有相关快速检索的方式吗?望不吝赐教,先谢过~
|
103
nyfok OP @orangeChu 我理解的通讯录数据就是姓名加电话号码,搜索方式就是:电话号码搜索(数字包含关系)、姓名搜索(全拼搜索、汉字或英文字母搜索、拼音首字母搜索)。数据如果只有几千条的话,我觉得不应该慢。
用 lucene 对这个搜索帮助不大,应为姓名和电话号码没有什么好分词的,既然用不到分词,这样 lucene 的搜索效果就体现不出来。当然,你可以使用单字分词,即一个字符作为一个分词,这样也可以,只需要自己按照 lucene 规范写一个分词器即可。 我个人建议,你可以试试看把这些记录全部加载到内存进行检索,速度应该很快,几千条数据应该没问题,这个方案还更简单。如果速度还慢,可以在内存里面写多个 set 集,参照 lucene 的原理。 譬如,张三,张四,张五,张张 =》如下 set 集: zhang:张三(0),张四(0),张五(0),张张(0|1) san:张三(1) si: 张四(1) wu: 张五(1) 搜索时根据输入首先获得对应的 set 集,对多个 set 集进行交集操作即可获得符合的记录。以上是最简单 demo,具体你可以设计算法,以更加符合自己的需求。 |
106
dirkl 2019-07-29 12:17:30 +08:00 via Android 1
最近用了一下,貌似比以前好很多了,楼主升级了?
|
107
nyfok OP @dirkl 感谢支持!之前因为随着索引结果集越来越大,所以导致查询速度有所变慢,最近优化了一下查询这一块,提高了速度,所以效果更好了。
|
109
nyfok OP @qdl lucene 搜索出来是类似于 list 的一个对象,通过页面大小(一个页面多少条记录)和页码,就可以计算出每页的起始和结束文档序号,从 lucene 搜索的 docs 对象里面直接按照序号取就行了。但是为了性能,不能每翻一页就 lucene 查询一下,所以可以在 lucene 上面封装一层 cache 层,每十页一 cache,这样十页内 lucene 其实只查询了一次,速度更快。
|
110
lcf8381595 2019-10-08 20:51:59 +08:00
@nyfok 请问楼主怎么联系,能留个邮箱吗?
|
112
dylanxult 2020-11-16 11:43:20 +08:00
楼主厉害,想请问下,现在网站还在持续更新么?
|
114
Braisdom 2021-07-18 16:04:14 +08:00
@nyfok 兄弟很牛 B,我也在搞一个程序员的搜索引擎,最近要上线了,多多请教了,和您的项目有部分类似,但我侧重点是信息关联和数据分析
|
115
bigtang 2023-06-12 10:52:13 +08:00
楼上两位,tanglib.com, 源代码搜索引擎,有机会合起来做吧
|