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

来源:互联网 发布:cms文章管理系统 编辑:程序博客网 时间:2024/06/02 18:53

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

下面的代码展示了两个的使用方法,同时顺便介绍了布尔查询类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)));


1 0
原创粉丝点击