七、搜索的简单实现(TermQuery)

TermQuery只能精确匹配字符串(包括分词后的字符串,不分词的就需要全部匹配),不能用于数字的匹配。

 

1、创建IndexReader ,创建IndexSearcher

    public IndexSearcher getSearcher(Directory directory) {
        try {
            if(reader==null) {
                reader = IndexReader.open(directory);
            } else {
                IndexReader tr = IndexReader.openIfChanged(reader);
                if(tr!=null) {
                    reader.close();
                    reader = tr;
                }
            }
            return new IndexSearcher(reader);
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


2、创建Term和TermQuery,根据TermQuery获取TopDocs,根据TopDocs获取ScoreDoc,根据ScoreDoc获取相应文档

    public void searchByTerm(String field,String name,int num) {
        try {
            IndexSearcher searcher = getSearcher();
            Query query = new TermQuery(new Term(field,name));
            TopDocs tds = searcher.search(query, num);

            System.out.println("一共查询了:"+tds.totalHits);//tds.totalHits是总记录数,和传入的num没有任何关系,num表示本次查询多少条记录
            for(ScoreDoc sd:tds.scoreDocs ) {
                Document doc = searcher.doc(sd.doc) ;
                System.out.println(doc.get("id")+"---->"+
                        doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+
                        doc.get("attach")+","+doc.get("date"));
            }
            searcher.close();
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

你可能感兴趣的:(query)