Lucene---查找的实现

建立查找方法使用8步:

1.创建Directory

这里的Directory跟建立索引的时候使用的是一样的,都是要指向索引文件,不同的是建立索引的时候指向的是未建立的文件夹?(如果已经存在会出现什么情况我还没有检验过),查找这里的Directory指向的是已经建立好的索引文件,即已经存在的的索引文件。

2.创建IndexReader

这相当于一个读“流”,用来读取索引文件的流。

3.使用IndexReader创建searcher

得到“流”之后,要建立查找类IndexSearcher,即我们使用IndexSearcher这个类来进行查找。就好像我们使用Connection连接数据库一样。

Implements search over a single IndexReader.–来自源码中IndexSearcher的注释,意即:在单个IndexReader流上面实现搜索。

4.创建Query

创建Query的原因是searcher进行搜索的时候我们需要统一提问的格式(纯粹个人描述),因此要给searcher传递一个query然后进行相应的查询。

5.使用seacher返回topDoc

例如下面的语句

TopDocs topdocs = searcher.search(query, 5);

这里的topDoc相当于查询结果,例如,上面我们就列出了前五条。

6.通过topDoc得到数组

7.遍历数组,得到document对象

8.从document对象得到信息

下面是代码:

    public void search()
    {
        try
        {
            // 1.创建Directory
            Directory directory = FSDirectory.open(Paths.get("d:/index01"));
            // 2.创建IndexReader
            IndexReader reader = DirectoryReader.open(directory);
            // 3.根据IndexReader创建Searcher
            IndexSearcher searcher = new IndexSearcher(reader);

            // 4.创建Query
            QueryParser parser = new QueryParser("content", new StandardAnalyzer());
            // 5.使用Searcher使用返回TopDocs
            Query query = parser.parse("Licensed");
            System.out.println("Searching for: " + query.toString("contents"));
            TopDocs topdocs = searcher.search(query, 5);
            // 6.根据TopDocs得到ScoreDoc
            ScoreDoc[] sds = topdocs.scoreDocs;
            // 7.根据ScoreDoc得到具体的Document
            for (ScoreDoc sd : sds)
            {
                Document d = searcher.doc(sd.doc);
                System.out.println(d.toString());
                System.out.println("end "+d.get("filename"));
            }
            // 8.根据Document对象获取具体的值
        } catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值