孔浩老师 Lucene 视频教程学习笔记(第2讲)

02_lucene简介和搜索初步.avi
执行搜索的一般步骤是
1、创建 Directory (创建在硬盘上);
2、创建 IndexReader;
3、通过 IndexReader 创建 IndexSearcher 的对象;
4、创建用于搜索的 Query;
创建 QueryParser 来确定要搜索的文件的内容,第 2 个参数表示要搜索的域 ,第 3 个参数是一个标准分词器;
创建 Query ,表示搜索 Field 中 包含 “Opportunities” 的 Query;
5、根据 IndexSearcher 执行搜索的方法,返回一个 TopDocs 对象;
6、根据 TopDocs 获取 ScoreDoc 对象;
7、根据 IndexSearcher 和 ScoreDoc 对象 获取具体的 Document 对象;
8、根据 Document 对象获取需要的值。

/** * 创建搜索 */
    @Test
    public void searcher(){
        IndexReader reader = null;
        IndexSearcher searcher = null;
        try {
            // 1、创建 Directory (创建在硬盘上)
            Directory directory = FSDirectory.open(new File("E:\\lucene\\index01"));
            // 2、创建 IndexReader
            reader = IndexReader.open(directory);
            // System.out.println(reader.numDocs());
            // 3、通过 IndexReader 创建 IndexSearcher 的对象
            searcher = new IndexSearcher(reader);
            // 4、创建用于搜索的 Query
            // 创建 QueryParser 来确定要搜索的文件的内容,第 2 个参数表示要搜索的域 ,第 3 个参数是一个标准分词器
            QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
            // 创建 Query ,表示搜索 Field 中 包含 “Opportunities” 的 Query
            Query query = parser.parse("Opportunities");
            // 5、根据 IndexSearcher 执行搜索的方法,返回一个 TopDocs 对象
            TopDocs tds = searcher.search(query, 10);
            // 6、根据 TopDocs 获取 ScoreDoc 对象
            ScoreDoc[] sds = tds.scoreDocs;
            for(ScoreDoc sd : sds){
                // 7、根据 IndexSearcher 和 ScoreDoc 对象 获取具体的 Document 对象
                Document document = searcher.doc(sd.doc);
                // 8、根据 Document 对象获取需要的值
                System.out.println(document.get("content") + "\t" + document.get("filename") + "\t" + document.get("path"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } finally{
            try {
                if(reader!=null)reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(searcher!=null)searcher.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

你可能感兴趣的:(Lucene)