几种检索的方法

迄今为止,我们已经学习了几种检索的方法,归纳一下:

首先,reader

IndexReader reader = IndexReader.open(path);
for ( int  i = 0 ;i < reader.numDocs();i ++ )
{
   System.out.println(reader.document(i);
}
   System.out.println(reader.getVersion);
   System.out.println(reader.numDocs());

numDocs为文档的数量,getVersion版本信息,reader.document(i)为各个document的所有field信息。

其次,TermDocs与reader

Term term = new  Term( " bookname " , " " );
TermDocs termDocs
= new  TermDocs(term);
while (termDocs.next())
{
   System.out.println(termDocs.doc());
   System.out.println(termDocs.freg());
}

termDocs.doc()表示Document的编号,即为ID值,termDocs.freg()表示出现的频率。

第三,Hits

IndexSearcher searcher  =   new  IndexSearcher(INDEX_STORE_PATH)
Hits hits 
=  searcher.search(q); 
        
for  ( int  i  =   0 ; i   <  hits.length(); i ++
        { 
          System.out.println(hits.doc(i));
          System.out.println(hits.score(i));
          System.out.println(hits.id(i));
          System.out.println(
" =============== " ); 
        } 

更进一层:

 

IndexSearcher searcher = new  IndexSearcher(path);
        Hits hits
= searcher.search(q);
        
        
for ( int  i = 0 ;i < hits.length();i ++ )
        {
            Document doc
= hits.doc(i);
            
            System.out.println(
" 书号: " );
            System.out.println(doc.get(
" bookNumber " ));
            System.out.println(
" 书名: " );
            System.out.println(doc.get(
" bookname " ));
            System.out.println(
" 出版日期: " );
            System.out.println(doc.get(
" publishdate " ));
}

最后综合一下:

 

IndexSearcher searcher = new  IndexSearcher(INDEX_STORE_PATH);
            Term t
= new  Term(searchType,searchKey);
            Query q
= new  TermQuery(t);
            TermDocs termDocs
= searcher.getIndexReader().termDocs(t);

            
while (termDocs.next())
            {
                System.out.println(termDocs.freq());
                System.out.println(searcher.getIndexReader().document(termDocs.doc()));
            }

上面的例子综合前面所讲的几种,看看能能看懂。

 此时我们改一改上一个例子吧

 

final  BitSet bits = new  BitSet(reader.maxDoc());
            bits.set(
0 ,bits.size() - 1 );
            
            Term term
= new  Term( " securitylevel " ,SECURITY_ADVANCED + "" );
IndexSearcher searcher
= new  IndexSearcher(reader);
            
            Hits hits
= searcher.search( new  TermQuery(term));
            
for ( int  i = 0 ;i < hits.length();i ++ )
            {
                bits.set(hits.id(i),
false );
            }
            
return  bits;

对比于上一个直接用底层API进行比较,这里用了先搜索再设置过滤操作。

OK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值