Lucene-2.0学习文档(一)

Luceneapache组织的一个用java实现全文搜索引擎的开源项目。其功能非常的强大,api也很简单。总得来说用Lucene来进行建立和搜索和操作数据库是差不多的(有点像),Document可以看作是数据库的一行记录,Field可以看作是数据库的字段。用lucene实现搜索引擎就像用JDBC实现连接数据库一样简单。

Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容

Lucene2.0的下载地址是http://apache.justdn.org/lucene/java/

大家先看一个例子,通过这个例子来对lucene的一个大概的认识。

一个Junit测试用例:(为了让代码清晰好看,我们将异常都抛出)

a)    这是一个建立文件索引的例子

public void testIndexHello() throws IOException

    {

        Date date1 = new Date();

        

        //可以说是创建一个新的写入工具

        //第一个参数是要索引建立在哪个目录里

        //第二个参数是新建一个文本分析器,这里用的是标准的大家也可以自己写一个

        //第三个参数如果是true,在建立索引之前先将c://index目录清空。

        IndexWriter writer = new IndexWriter("c://index",new StandardAnalyzer(),true);

        

//      这个是数据源的文件夹

        File file = new File("c://file");

        /**

         * 例子主要是将C://file目录下的文件的内容进行建立索引,将文件路径作为搜索内容的附属.

         */

        

        if(file.isDirectory())

        {

            String[] fileList = file.list();

            for (int i = 0; i < fileList.length; i++)

            {

//              建立一个新的文档,它可以看作是数据库的一行记录

                Document doc = new Document();

                File f = new File(file,

                        fileList[i]);

                Reader reader = new BufferedReader(new FileReader(f));

                doc.add(new Field("file",reader));//为doument添加field

                doc.add(new Field("path",f.getAbsolutePath(),Field.Store.YES,Field.Index.NO));

                writer.addDocument(doc);

            }

            

        }

        writer.close();//这一步是必须的,只有这样数据才会被写入索引的目录里

        Date date2 = new Date();

        System.out.println("用时"+(date2.getTime()-date1.getTime())+"毫秒");

}

注意:因为建立索引本来就是费时,所以说最后输出的用时会比较长,请不要奇怪。

b)一个通过索引来全文检索的例子

public void HelloSearch() throws IOException, ParseException

    {

        IndexSearcher indexSearcher = new IndexSearcher("c://index");//和上面的IndexWriter一样是一个工具

        QueryParser queryParser = new QueryParser("file",//这是一个分词器

                new StandardAnalyzer());

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Query query = queryParser.parse(br.readLine());//这个地方Query是抽象类大家也注意一下,下面会讲到的

        Hits hits = indexSearcher.search(query);

        Document doc = null;

        System.out.print("正搜索................");

        for (int i = 0; i < hits.length(); i++)

        {

            doc = hits.doc(i);

            System.out.println("内容是:"+doc.get("file"));//注意这里输出的是什么

            System.out.println("文件的路径是:" + doc.get("path"));

        }

    }

通过上面的两个例子应该可以看出Lucene还是比较简单的。

运行一下上面的两个例子,大家可能会说怎么doc.get(file);返回的是空呢,我们马上会讲到。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值