lucene中search内置的Filter

先来看一下RangeFilter:

public   static   void  printFilter(String path) throws  IOException
    {
        Term normal
= new  Term( " securitylevel " ,SECURITY_NORMAL + "" );
        Term middle
= new  Term( " securitylevel " ,SECURITY_MIDDLE + "" );
        Term advanced
= new  Term( " securitylevel " ,SECURITY_ADVANCED + "" );
        
        BooleanQuery bq
= new  BooleanQuery();
        bq.add(
new  TermQuery(normal),BooleanClause.Occur.SHOULD);
        bq.add(
new  TermQuery(middle),BooleanClause.Occur.SHOULD);
        bq.add(
new  TermQuery(advanced),BooleanClause.Occur.SHOULD);
        
        IndexSearcher searcher
= new  IndexSearcher(path);
        
        RangeFilter filter
= new  RangeFilter( " publishdate " , " 1999-01-01 " , " 1999-10-10 " , true , true );
        
        Hits hits
= searcher.search(bq,filter);
        
        
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 " ));
            System.out.println(
" 安全级别 " );
            
int  level = Integer.parseInt(doc.get( " securitylevel " ));
            
switch (level)
            {
            
case  SECURITY_ADVANCED:
                System.out.println(
" 高级 " );
                
break ;
            
case  SECURITY_MIDDLE:
                System.out.println(
" 中级 " );
                
break ;
            
case  SECURITY_NORMAL:
                System.out.println(
" 一般 " );
                
break ;
            }
            System.out.println(
" ==================== " );
        }
    }

其实这段代码没什么,就增加了下面这段代码

RangeFilter filter = new  RangeFilter( " publishdate " , " 1999-01-01 " , " 1999-10-10 " , true , true );

观察到参数里里面有两个true,表示边界包含在范围内.

其次,QueryFilter(在结果中查找)

 

Term begin = new  Term( " publishdate " , " 1999-01-01 " );
        Term end
= new  Term ( " publishdate " , " 1999-10-15 " );
        
        RangeQuery q
= new  RangeQuery(begin,end, true );
        
        QueryFilter filter
= new  QueryFilter(q);
        
        Term normal
= new  Term( " securitylevel " ,SECURITY_NORMAL + "" );
        TermQuery query
= new  TermQuery(normal);
        
        IndexSearcher searcher
= new  IndexSearcher(path);
        Hits hits
= searcher.search(query,filter);

这里只使用了词条搜索,让我不知所以啊,因为搜索的方法太多了;呵呵……

下一帐:缓存结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值