lucene 范围过滤
Lucene里面有关于Filter的整体知识
下面,我们来看下具体的在代码里怎么实现,先来看下我们的测试数据
- id score bookname ename type price date
- 1 1 飘渺之旅 pmzl 小说 52.23 201005
- 2 1 三国演义 sgyy 小说 36.13 201207
- 3 1 数据库实战 sjksz 技术 77.13 200811
- 4 1 编程宝典 bcbd 技术 100.3 200501
- 5 1 职场关系论 zcgxl 职场 36.59 200501
- 6 1 健康生活 jksh 生活 20.47 200008
- 7 1 看清本质 kqbz 社会 10.37 201004
- 8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
- //使用过滤器 最后一个为true时包含边界部分,为false时不包含边界部分
- //倒数第二个为true时,包含查询边界,为false时不包含
- TermRangeFilter filter=new TermRangeFilter("ename", new BytesRef("h"), new BytesRef("n"), true, true);
- TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
核心代码
- NumericRangeFilter<Double> filter=NumericRangeFilter.newDoubleRange("price", 10D, 40D, true, false);
- TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果
- 2 1 三国演义 sgyy 小说 36.13 201207
- 5 1 职场关系论 zcgxl 职场 36.59 200501
- 6 1 健康生活 jksh 生活 20.47 200008
- 7 1 看清本质 kqbz 社会 10.37 201004
- 8 1 编程,编程 bcbc 社会 10.37 201004
核心代码
- //使用缓存过滤
- Filter filter=FieldCacheRangeFilter.newDoubleRange("price", 20D, 50D, true, true);
- TopDocs topDocs=searcher.search(new MatchAllDocsQuery(),filter,10000);//默认无排序方式
输出结果