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、付费专栏及课程。

余额充值