推荐一个Perl的搜索引擎-KinoSearch

推荐一个Perl的搜索引擎-KinoSearch

借鉴了很多Lucene的思想,底层关键部分用C实现,效率还不错。有潜质成为Perl界的明日之星。
去主页看看吧
http://www.rectangular.com/kinosearch/
如果要尝试一下,记得要使用开发版,这不是一个向后兼容的版本。

首先描述索引结构:
    # ./MySchema.pm


    package MySchema;
    use base qw( KinoSearch::Schema );
    use KinoSearch::Analysis::PolyAnalyzer;
    
    our %fields = (
        title   => 'KinoSearch::Schema::FieldSpec',
        content => 'KinoSearch::Schema::FieldSpec',
    );

    sub analyzer {
        return KinoSearch::Analysis::PolyAnalyzer->new( language => 'en' );
    }


接着就可以创建索引了:
    use KinoSearch::InvIndexer;
    use MySchema;
    
    my $invindexer = KinoSearch::InvIndexer->new(
        invindex => MySchema->clobber('/path/to/invindex'),
    );
    
    while ( my ( $title, $content ) = each %source_docs ) {
        $invindexer->add_doc({
            title   => $title,
            content => $content,
        });
    }
    
    $invindexer->finish;


现在就可以查找了:
    use KinoSearch::Searcher;
    use MySchema;
    
    my $searcher = KinoSearch::Searcher->new(
        invindex => MySchema->read('/path/to/invindex'),
    );
    
    my $hits = $searcher->search( query => "foo bar" );
    while ( my $hit = $hits->fetch_hit_hashref ) {
        print "$hit->{title}\n";
    }


我也刚看到,还不知道如何给加一个中文分词,欢迎有兴趣的朋友前来讨论。
有个基于lucene的plucene,还是依赖于lucene:
http://blog.chinaunix.net/u/809/showart.php?id=55741
而Kinosearch是完全用perl另起炉灶吧?


QUOTE:
原帖由 royalzhang 于 2007-8-30 13:52 发表
有个基于lucene的plucene,还是依赖于lucene:
http://blog.chinaunix.net/u/809/showart.php?id=55741
而Kinosearch是完全用perl另起炉灶吧?

kino是借鉴了lucene的思想,但是进行了重构。
一是底层用c实现,二是相关类层次简化了很多,文档中特别提到Lucene的oo设计简直就是笑话,罗嗦之极。不过java程序都是这个德性。
plucene在类设计上好像和lucene更相似一些,而且由于是一个纯Perl的实现,所以效率比较差。
plucene的一个目标是要实现和lucene的底层索引数据兼容,因此如果有这样的要求则选择plucene.
怎么才能支持中文啊