七、搜索的简单实现(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();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值