Quick Start

Crawling Internet

你第一件可能想做的事就是搜索网络。在jbox中这是很容易实现的。 下面代码展示一个搜索网络的示例:

   
public class Foo {
    public crawl(String[] args){
        Configuration cfg = Configuration.config();
        WebSpider s = cfg.buildWebSpider();
        while(s.hashNext()){
            Page p = s.next();
            System.out.println(p);
        }
    }
}

文本切割

文本切割是搜索引擎中非常重要的一块。不同的语言有不同的切割算法。 在jbox的当前版本中提供了英文及CJK文字的切词实现。 在默认的情况下,只指定了英文切词,你可以在配置文件“jbox.cfg.xml”中修改需要切词的算法。做为开始,你可以像下面的代码一样切割文本:

public void cutText(){
        String text = "Cutting text into words is very important for search engineer."
        CutterBox cb = cfg.buildCutterBox();
        System.out.println(cb.cutText(text));
}

    或者切割页面的包装类Page:

public void cutPage(){
        String text = "Cutting text into words is very important for search engineer."
        Page page = new Page();
        page.setText(text);
        CutterBox cb = cfg.buildCutterBox();
        cb.cutPage(page));   
        System.out.println(page.getWords());
}

你可以在配置文件中指定多个切割类同时作用(处理混合语言文本)。

生成索引

索引是搜索引擎的核心部分。 在jbox中也是很容易就可以做到的。下面代码展示一个示例,用默认的IndexWriter接口实现类来创建页面的索引。

public void createIndex(){
        WebSpider s = cfg.buildWebSpider();
        CutterBox cb = cfg.buildCutterBox();
        org.jbox.indexer.IndexWriter iw = cfg.buildIndexWriter();
        while(s.hashNext()){
            Page p = s.next();
            if(p==null||p.getText()==null)continue;
            cb.cutPage(p);            // You should cut a page befor create its index.
            iw.saveIndex(p);
        }
}

你可以在数据库“Word”表的“index”字段找到所创建的索引。 一个索引可能如下:

    "22-0.166667-0,1"

第一个域“22”表示这个词在id为22的页面中出现过,第二个域“0.166667”表示这个词在该页面中的TF(词频)。第三个域“0,1”表示词在该页面中的位置。
例如:

 "I have a cat. You have a dog. He is so funny."

词“have”在第一、第二个句子出现,所以这个词在这一段文本中的位置就是“0,1”。这段文本有12个词,所以TF(词频)是 2/12 = 1.66667。 假设这段文本在“Page”表中的存在,其id为“22”,那么这个词在这段文本中的索引就是“22-0.166667-0,1”。

索引检索

在索引被创建之后,你就可以开始给你的应用程序创建自己的搜索端了。例如:

    public void search(){
        String query = "successfully,status";        //search the key words "successfully,status";
        Configuration cfg = Configuration.config(); //load default configuration file "jbox.cfg.xml";
        Searcher s = cfg.buildSearcher();
        Page[] result = s.search(query);
        for (Page p : result) {
            System.out.println(p.getTitle());
            System.out.println(p.getText());
            System.out.println(p.getUrl());
        }
    }

你可能会发现,返回的text仅仅是一个简短的介绍,如果你用的是SimpleSearcher来检索的话。那是因为SimpleSearcher返回一个Page的代理类。如果你想得到完整的text的话,你可以像下面的代码这样做:

        for (Page p : result) {
            PageProxy proxy = (PageProxy)p;
            P = p.getPage();
            System.out.println(p.getText());
        }

关键词高亮

如果你需要将关键词高亮显示,你可以使用Highlight方法来做到这一点。例如,你可以将下面代码加到上面的例子中去高亮关键词。

        for(…){
        …
        searcher.highLight(p.getText(), new StringBuffer(query), Color.RED)

}
   
Highlight方法做仅仅是将所有的关键词置换成带指定的颜色:
       
    keyword---><font color="xxxxxx">keyword</font>

 在你已经完成了一个你自己的简单搜索引擎。 你可以在example包中找到更多的例子:


        createIndex/SimpleSample.java - 一个简单的,crawl网络创建索引的例子。

     createIndex/ComplexExample.zip- 一个用多线程改进crawl网络创建索引的效率的例子。

        MyJbox.zip - 一个完整的,在tomcat+mysql下的例子,需要tomcat5.5, mysql5.0, jdk 1.5以上。

你可以在这里下载到Jbox。
Copyright © 2007-2013 YiBin.h.
Licensed under the Apache License, Version 2.0.