开源纯JAVA全文搜索引擎,希望大家给点意见。

天刚完成的,做了好久了。一个纯java的全文搜索引擎框架。

做这个的目标是,更简单,更容易,以至任何一个懂java的人都可以很容易地搭建一个个人用的搜索引擎,例如个人站点的站内搜索。

主页:http://j-box.sourceforge.net/index_cn.html
API文档、QUICK START都有。
本来想给在SOURCEFORGE的主页加上个搜索引擎的DEMO,但发现SOURCEFORGE是用PHP的,JAVA用不上。。。

Jbox目前是beta版本,如果各位朋友发现bug了,麻烦发邮件到j-box-user@lists.sourceforge.net(如果发不成功,则发到yibin_h@users.sourceforge.net ,mailing list刚开通,还不大会用--!),谢谢了^_^

主页地CVS功能目前还没开通——sourceforge的CVS管理好复杂@_@...

有朋友问起,是否有像现在的GOOGLE一样输入一个词,给出相应相关词的功能。
是有的,不过不是像google一样是给出同一个词的各种组合,而是根据语义给出最相关的词。这个有一套相关性算法的,我的毕业设计做的就是那个。我的论文目前投到《中文信息学报》,还不知道审稿结果。因为没什么时间,那一部分的代码现在还没有整理出来,后续的版本会追加上去。

无论好与坏,可以的话希望能给点意见,我需要大家的意见来做进一步的改进和开发啊!谢谢了!

赞一个,好东西大家分享。

非常感兴趣:"不过不是像google一样是给出同一个词的各种组合,而是根据语义给出最相关的词" 期待这个功能出来,才是最厉害的。
[该贴被banq于2007年09月02日 09:30修改过]

谢谢banq的鼓励,我会尽快整理出来的^_^
不过那个功能只有中文的实现了,英文的没做。因为中文跟英文语法结构不一样,语义相关算法是不一样的。对英文的语法结构不熟,所以英文语义那块做起来很棘手;中文部分的算法跟实现都是自己研究的。
在开始做的时候压根不知道google有这功能,那时好像google也还没出这功能,所以当我的毕业设计完成了后,看到google推出的,自己都很惊讶,呵呵。

有朋友问到,我的这个项目跟LUCENE的区别,下面说说。

开发这个之前我也考虑过LUCENE,但在仔细看了LUCENE之后,有4个地方让我觉得不舒服,于是突然就萌生了想自己做一个这样的东西出来的想法。

1. LUCENE本身只是一个检索框架,需要做成完整的搜索引擎的话还需要再去学NUTCH,然后再去研究两者之间的整合,这过程理解起来不容易;
2. LUCENE对数据库的支持度不好,虽说有数据库扩展包,但LUCENE主页上的FAQ也说了,并不理想。而对于大规模数据我比较倾向于数据库,所以在当时在看LUCENE时第一想法其实是能不能开发一个更好的基于数据库扩展包,不过后来发现这个扩展好复杂。
3. LUCENE对中文的支持度不够(虽然有很多人做了中文的扩展就是了);
4. 最后一点,也是让我最不舒服的一点,LUCENE的源代码,如果有看的人应该可以发现,很多地方并不是很符合面向对象的,看起来很费劲,也很难理解。例如,因为我英文语法不行,所以英文分析参照了LUCENE(org.apache.lucene.analysis.PorterStemmer这个类),发现LUCENE的处理方法是传入一个字符串后,定义全局变量做下标,利用全局下标在字符串之间移动处理(其中还有一些方法是单纯用于移动下标的,意义不明……)。很难表达我当时那种感觉,总之,感觉很别扭,不自在。或许这样做可以提高分词的性能,但我还是比较喜欢面向对象的处理方法;

在之后做JBOX的时候,就是根据上面对LUCENE不满的地方做的。
1. JBOX最首要的目的,是简单。要让开发变得更简单,个人认为,这是框架的首要责任。当然,或许目前我这个作品可能依然不够简单性,在后续的版本我会继续努力改进。
2. JBOX第二个目的是纯粹的面向数据库。因为相信有很多人跟我一样,应用程序都习惯搭建在数据库上,由其是大规模的数据。目前的版本中,持久层是用HIBERNATE做的,这影响了存储索引时的效率,我在尝试写存储过程来代替HIBERNATE在存储的部分的功能,以提高效率,后续的版本会追加这一点;
3. JBOX分词的出发点不是西方文字,而是中文(毕竟还是母语熟悉,其他语言的分词好难懂,呜呜……)。分词部分完整的我没有看LUCENE怎么实现,JBOX的实现方式是利用责任链对多语言文本进行切词,虽然目前仅实现了英文跟中文就是了。(德文的切法正在看LUCENE的实现中,就如上面所说的,难懂……);
4. JBOX的结构是尽量按面向对象的思想设计的,目前我还在继续改进中。其实如果单单只是要搜索引擎的功能,3个月前我就已经做好了。但为了让其结构更容易理解,更容易扩展,更加贴近面向对象,这个过程整整消耗了我3个月时间。(想想真很辛苦,我也要上班养活自己,时间都是挤出来的,唉。);
5. 最后,类似google那样相关词搜索的功能,LUCENE没有吧?这个就如我上面帖子里说的,我已经实现了,只是还没整理。相关算法的论文也在审稿中,9月15号后才能知道结果(编辑部回答时15号后在问,没说15号后多少,呜……);

最后,JBOX当然不可能代替LUCENE,我也没那么自大去做这种事。例如LUCENE在文件索引,数据库索引方面我是暂时没打算做的。JBOX的当前目的只是,网站上的搜索引擎,其他的检索还是要LUCENE。

没有深入研究,不过同样支持一下开源精神,希望j-box能照顾一下SpeedFramework 的fs,也做一套基于SpeedFramework 的实现。

行,我去看看。我也在考虑要怎么解决用HIBERNATE做持久层的话,大批量数据插入时性能不足的问题。下个版本在考虑要加多几种不同的持久层实现供选择。
谢谢楼上的关注和建议^_^

最近要做一个业务核心是 基于案例推理 的程序,但对人工智能搜索这一块不是很懂,希望楼主的这个jbox有一天可以加上 自我学习推理的功能 
呵,顶一个

支持一下。厉害。

下面泼点冷水。^-^

我觉得楼主做的这个性能可能是个瓶颈。我觉得基于数据库并不是个好的想法,而且数据库的性能对搜索来说不理想。还有如果真的要做个好性能的搜索框架的话,最好用C,java和C之间的I/O操作差距还是很大的。

关于楼主这个做的面向对象是站内搜索,Lucene也可以做到站内搜索的。如果楼主想把自己的东西真正的做成一个产品的话,除了本身这个框架外,我觉得应该多费点心思在外边。