lucene 4.10实现多域检索和区间范围检索

本文介绍了如何在Lucene 4.10中执行多域检索和区间范围查询,通过示例代码展示了BooleanQuery的使用,包括Occur.MUST、Occur.MUST_NOT和Occur.SHOULD三种关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多域检索和区间范围检索使用频率非常高

下面的代码展示了两个的使用方法,同时顺便介绍了布尔查询类BooleanQuery,关系有三种:Occur.MUST,Occur.MUST_NOT,Occur.SHOULD

//实现逻辑检索需要使用BooleanQuery,具体可以查询相关的逻辑关系表达式Occur
        BooleanQuery booleanQuery = new BooleanQuery();
        Directory dir = FSDirectory.open(new File(indexpath));
        IndexSearcher is = new IndexSearcher(DirectoryReader.open(dir));
        Analyzer analyzer = new SmartChineseAnalyzer();
        
        String housename=condition.getHousename();
        long minPrice = condition.getMinPrice();
        long maxPrice = condition.getMaxPrice();
        if (!StringUtils.isBlank(housename))
        {
            //使用MultiFieldQueryParser实现多域检索
            QueryParser qp = new MultiFieldQueryParser(new String[]{"housename","kfs"}, analyzer);
            //QueryParser qp = new QueryParser("housename",  analyzer);
            Query query = qp.parse(housename+"*");
            booleanQuery.add(query, Occur.MUST);
            
            
           
        }
        if (minPrice==0)
        {
            minPrice=Long.MIN_VALUE;
        }
        if (maxPrice==0)
        {
            maxPrice=Long.MAX_VALUE;
            
        }
        
        //使用NumericRangeQuery实现价格区间范围的检索,因为价格的索引使用的是LongField,所以使用的是NumericRangeQuery<Long>
        NumericRangeQuery<Long> priceQuery = NumericRangeQuery.newLongRange("price", minPrice, maxPrice, true, true);
       
        booleanQuery.add(priceQuery, Occur.MUST);
        //使用Sort内实现检索结果排序
        TopDocs hits = is.search(booleanQuery, 100, new Sort(new SortField("createtime", SortField.Type.LONG)));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值